毒瘤
- 不使用全局变量
- 使用块级作用域,不var
- return与返回值要位于同一行,否则当自动插入分号后会返回undefined
- 当对象的属性名与js保留字相同时,无法使用点语法,使用括号表示法
- js字符是16位的,Unicode将一对字符视为一个单一的字符,而js将其认为是两个不同的字符
- 注意typeof对于null和正则返回'object'
- parseInt在遇到非数字时会停止,注意parseInt('16')和parseInt('16 jk')均返回16
- +运算符会根据参数来判断是数值计算还是字符串拼接
- NaN不是数字并且它不等于自身,typeof对于其返回'number',判断值是否为数值类型可用typeof value === 'number' && isFinite(value)
- js的数组是伪数组,不需设置维度、不会越界,但性能不如真正的数组,typeof不能区别数组与对象,可用instanceof区别
- js的假值:0、NaN、''、false、null、undefined
- hasOwnProperty是一个function而不是运算符,不会查询原型链上的属性,可以被替换,不要使用obj.hasOwnProperty=null之类
- js的默认对象不是空对象,当原型链可能对我们产生影响时,使用Object.create(null)创建纯净的对象
糟粕
- 不使用==,而是===;不使用!=,而是!==
- 不使用with语句
- 不使用eval语句
- 适当地使用continue语句能提高可读性,但性能不如重构去除continue的代码
- swith中的每个case下注意break,小心穿越到下个case
- if语句可以接受单行语句,但此时还是应加上花括号
- ++、--不够严谨,使得代码过于拥挤,不使用的话代码可以变的更整洁
- 使用位操作符(& | ^ ~ >> >>> <<)要小心点,&容易误写为&&
- function语句定义的函数存在声明提升,使用函数表达式或IIFE替代之
- 不要使用类型的包装对象,形如new Boolean()、new Number()、new String(),另外也应避免使用new Object()、new Array(),使用{}、[]代替
- new运算符后跟的函数应以首字母大写的形式命名
- js中的void是一个运算符,接受一个运算数并始终返回undefined,没有作用,应避免使用
欢迎关注、点赞