草 稿

《JavaScript语言精粹》附录(毒瘤、糟粕部分)总结

笔者尝试用轻单形式整理一下这本经典书籍看看效果,读过的可以再过一遍,没读过的人也可浏览参考!有条件还请购买正版书籍。

笔者自出道以来编写JavaScript时一直将之作为标准,笔者认为避免这些被作者认为糟糕的东西即使没有好处但至少也没有坏处。

  1. 附录a:毒瘤(英文原文是awful parts,又译糟粕)

  2. 全局变量

    容易隐式创建,且难以维护。

    避免方法:不要使用。可以通过使用JSHint等工具检测、在程序开头声明'use strict';避免。

  3. 作用域

    JavaScript没有块级作用域。

    避免方法:把变量声明放在函数最开始可以避免出意料外的错误。

  4. 分号(有争议)

    JavaScript的分号的不确定性。

    避免方法:能加就加,使用JSHint检测。

    这一问题尚有争议,现在社区中也有很多项目倾向不使用分号。具体情况看个人喜好和团队习惯,JSHint也有关闭分号的选项。

  5. 保留字

    package、int、enum等保留字没有在JavaScript语法中出现,但还是成为了保留字

    避免方法:不要使用保留字。

  6. Unicode

    JavaScript无法覆盖全部Unicode字符,长度检测会有问题。

  7. typeof

    typeof规则不直观。

    避免方法:死记硬背(不推荐,考虑团队成员参差不齐,不是所有人都愿背,比如我),或使用lodash等工具库。

  8. parseInt

    parseInt(08) === 8 //false

    parseInt(08, 10) === 8 //true

    避免方法:所有parseInt都要加第二个参数。

  9. 浮点数

    0.1+0.2 === 0.3 //false

  10. NaN

    typeof NaN === 'number' //true

    避免方法:使用typeof 变量 === 'number' && isFinite(变量)判断变量是否是Number。不过其实我觉得这一条多数情况也没必要。

  11. 没有数组

    typeof [] //object

    避免方法:自己想办法,或使用ES5才有的Array.isArray或lodash中的_.isArray。

  12. false值太多

    0、NaN、''、null、undefined都是false

    避免方法:使用===,不要使用==。

  13. hasOwnProperty

    这个方法竟然可以被重载。

    避免方法:需要时使用Object.prototype.hasOwnProperty或lodash的_.has。

  14. 对象

    避免给对象属性意外地使用保留的字段,如constructor、prototype。

  15. 附录b:糟粕(英文原文是bad parts,又译鸡肋)

  16. ==

    ==会产生强制类型转换,结果不直观。

    避免方法:不要使用==和!=,要使用===和!==。

  17. with语句

    难以阅读。

    避免方法:除非必要(如实现一套模板引擎),不要使用with。

  18. eval

    难以阅读、性能低。

    避免方法:不使用eval和Function构造函数,不要给setTimeout和setInterval传递字符串参数。

  19. continue

    性能低。

  20. switch穿越

    case忘了加break或return会继续穿越到下一个case。

    避免方法:使用JSHint帮助检查。

  21. 可以不在后面用代码块的语句

    容易产生阅读歧义、维护也不方便。

    避免方法:if、while、do、for后面一律加大括号

  22. 位运算符

    效率低。不过使用率也比较低。

  23. function语句和function表达式

    JavaScript中可以用function xxx(){}和var xxx = function(){};两种方法声明函数,前者可能会发生隐式的变量提升。

    避免方法:使用var xxx = function(){};声明函数。

  24. 类型包装对象

    不要把Boolean、Object、Array当构造函数使,比如var obj = new Object();,要使用字面量声明,比如var obj = {}。

  25. new

    一个构造函数即使不用new直接执行也可以正常运行,但结果就不是预期的了。

    避免方法:遵循构造函数开头大写的约定。

  26. void

    压根没用。

评论(4

void 还是有用的。
作者
一次没用过
A 标签 href 里用得比较多~~
现在一般都动态绑定事件,确实也用不太到了。。。
取消