当前位置: 首页 > news >正文

前端代码中经常遇到的问题

虽然现在有很多代码质量的检测工具但是依然不能检测完全,一下几点是我们在写前端代码中经常遇到的问题。

重复的收集元素

在使用jQuery或者Zepto,原生的元素选择器的时候,重复收集元素。

$(".items").addClass("hide");
$(".items").removeClass("hide");

这种问题遇到的比较多,其实在webstrom中会有红字提醒标示。告诉你不推荐你这样使用。
可以

var $items = $(".items");
$items.addClass("hide");
$items.removeClass("hide");

重复的条件判断

重复的条件计算很常见,但通常也是有一个通用的模式来避免它们。你可能会看到一段代码写成这样:

var performMiracle = function() {
    // 如果浏览器支持A特征...
    if(features.someFeature) {
    }
    // ... 如果不支持
    else {
    }
};

这是可行的,但不是最高效的代码,上面的条件可能会多次计算。写成下面的样子会更好:

var performMiracle = features.someFeature ? function() {
    // Plan A stuff
} : function() {
    // Plan B stuff
};

重复的对象创建

相比较重复的操作,重复的对象创建更难发现,通常是表现在正则表达式上。看一下下面的这段代码:

function cleanText(dirty) {
    // 去除SCRIPT tags
    clean = dirty.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, "");
    // Do some more cleaning, maybe whitespace, etc.
    return clean;
}

上面的代码会不断的重复创建一个新的(但是相同的)正则表达式对象,对于这种情况,如果你在这个函数的外部创建这个对象,就能避免这种情况的出现:

var scriptRegex = /<script[^>]*>([\s\S]*?)<\/script>/gi;
function cleanText(dirty) {
    // Get rid of SCRIPT tags
    clean = dirty.replace(scriptRegex, "");
    // Do some more cleaning, maybe whitespace, etc.
    return clean;
}

在上面的例子中,正则表达式对象只创建了一次,但多次使用——省了很多CPU处理。


以下为自己的常遇到收集整理

忘记声明数据类型

下面这份代码

function mean() {
    var sum;
    for (var i = 0; i < this.data.length; i++){
        sum += this.data[i];
    }
    return sum / (this.data.length);
} 

乍一看没说明问题,但是返回的结果却是NaN;如果做number类型叠加记得声明 var sum = 0;没有什么大的错误就是很容易忽略的小问题。

手机设备事件绑定问题

手机设备事件绑定类型不正确,比如用click 在ios 设备上是失效的,应该换成 touchend或者 touchstart

如果需要的话可以用

$.bind('click touchend' ,function(event){...});

未完结

转载于:https://www.cnblogs.com/yunkou/p/4241279.html

相关文章:

  • Java学习资料-Comparable和Comparator实现对象比较
  • 12月流量入口占比动态:搜索引擎季军 份额破20%
  • java虚拟机学习-JVM调优总结-典型配置举例(10)
  • 批处理备份mysql数据
  • android API8以上版本使用GridLayout
  • CMCC-EDU不是给计算机专业人准备的网络
  • 微信JS-SDK“分享信息设置”API及数字签名生成方法(NodeJS版本)
  • GitHub上关于docker的项目排名前十个介绍,同时推荐下两本gitbook
  • C#的预处理指令的全局设计
  • ruby之各种概念
  • IOS路径沙盒文件管理
  • 异步任务与回调
  • html块级元素与行内元素
  • java web project --classpath
  • IIS6与IIS7在编程实现HTTPS绑定时的细微差别
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • CSS居中完全指南——构建CSS居中决策树
  • extract-text-webpack-plugin用法
  • If…else
  • Js基础——数据类型之Null和Undefined
  • NSTimer学习笔记
  • pdf文件如何在线转换为jpg图片
  • 电商搜索引擎的架构设计和性能优化
  • 警报:线上事故之CountDownLatch的威力
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 一道闭包题引发的思考
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #图像处理
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (八)Flask之app.route装饰器函数的参数
  • (翻译)terry crowley: 写给程序员
  • (九)信息融合方式简介
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (算法)N皇后问题
  • (转)我也是一只IT小小鸟
  • .Net Core 中间件验签
  • .NET delegate 委托 、 Event 事件
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET中的Exception处理(C#)
  • .pub是什么文件_Rust 模块和文件 - 「译」
  • []常用AT命令解释()
  • [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存...
  • [20190416]完善shared latch测试脚本2.txt
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [Bugku]密码???[writeup]
  • [C/C++]关于C++11中的std::move和std::forward
  • [CDOJ 838]母仪天下 【线段树手速练习 15分钟内敲完算合格】
  • [C语言]一维数组二维数组的大小