编写高质量JavaScript的有效方法
2015-12-21 14:23
435 查看
编写高质量JavaScript的有效方法
一、js的特别之处
浮点数计算不精确,应该尽量转为整数进行计算当心强制的类型转换。
NaN是js中唯一一个不等于自身的值,可以利用这一点来检测NaN.
js中的七个假值:false,0,-0,null,undefined,NaN,"".
当参数类型不同时, == 运算符会对参数用一套难以理解的隐式强制转换的规则进行转换,所以应尽量使用 === 运算符,比较不同类型的值时,先进行手动的转换后在进行比较。
分号插入规则
分号仅在}标记之前、一个或多个换行之后和程序输入的结尾插入
分后仅在后面的输入标记不能解析时插入
for循环头部var i=0之后必须显式的插入分号
在return , throw, break, continue, ++ ,-- 的参数之前绝对不能换行,否则会在换行前强制插入分号
如果下一条语句以(, {, +, -. / 开始时,前一行语句不能省略分号,否则会视为同一行语句执行。
二、变量作用域
闭包的三个特性js允许你应用在当前函数外定义的变量
即时外部函数已经返回,当前函数仍然可以引用外部函数中定义的变量
闭包可以更新外部变量的值
三、使用函数
永远不要修改arguments对象使用bind方法创建绑定到适当接受者的函数
function bind(fn, context) { return function() { return fn.apply(context, arguments); }; }
避免使用函数对象的toString()方法
避免使用非标准的arguments.callee和arguments.callee属性
四、对象和原型
使用Object.getPrototypeOf(obj)函数而不是obj._proto_来检测原型不要修改_proto_属性
使用闭包来存储私有数据
继承时使用object.create(parent.prototype)来构造子类的原型,以避免调用父类的构造函数
不要重用父类的属性名(容易引发冲突)
不要去继承内置的Array、Function等内置的标准类
五、数组与字典
属性枚举时使用hasOwnProperty过滤原型属性,防止原型污染。为了避免hasOwnProperty被意外覆盖,可以预先缓存hasOwn方法或者直接在原型中加入hasOwn方法。
var hasOwn = {}.hasOwnProperty;
因为for...in循环无法保证循环顺序,所以用数组而不是字典来存储有序集合,使用for循环循环数组。
绝对不要在Object.prototype中增加可枚举的属性
不要在枚举时修改枚举对象
ES5中Array自带的foreach,map,filter等方法优于for循环,但如果需要提前终止循环还是推荐使用传统的循环。
六、库和API设计
接口设计为接受关键字参数的选项对象,使用extend合并默认参数对象和用户写入的参数对象。避免过度的强制转换,考虑使用防御性监视非预期的输入。
支持方法链.
相关文章推荐
- JavaScript模式笔记
- JavaScript对象中的属性(可写,可配置,可枚举,value,getter,setter)
- js设置组合快捷键/tabindex功能的方法
- 高性能JavaScript学习笔记
- js复选框相关事件
- js数据存放
- 先执行javascript在执行ios原生函数
- js变量提升
- 【JavaScript】JavaScript获取当前时间
- 解决setTimeout 计时器重复调用的问题
- Javascript中null值,特别注意的两点
- JAVASCRIPT中NULL值,特别注意的两点
- Ext.js5表单—注册表单(42)
- jsp的三种自定义标签 写法示例
- 代码高亮javascript 插件 syntaxhighlighter 使用介绍
- leetcode (228) Summary Ranges js代码实现
- 使用JSON需要的包
- js对时间的操作
- 无敌JS关闭当前窗口代码,不弹出确认提示
- Promises与Javascript异步编程