js语言精粹-附录

  1. 附录
    1. 毒瘤
    2. 糟粕
      1. ==和===
      2. with 语句
      3. eval
      4. continue 语句
      5. switch 穿越

附录

毒瘤

  • 全局变量:无论是隐式造成的,还是挂在 window 上的,在项目变大时都会导致项目很难管理
  • 作用域:这个主要是熟悉块级作用域的程序猿们很难适应,不过 ES6 里面加上了块级作用域了
  • 自动插入分号,js 为了减少错误,会在忘记写 return 的行末加上分号,主要是 return 的时候注意点,可能导致程序被提前返回
  • 保留字:JS 中有大量的保留字,但是其实也都没有被使用
  • unicode:JS 把一对字符认为是两个不同的字符,然而其实他们可能只是一个字符,但是在 ES6 里面已经修复了。
  • typeof:这个主要是就是 null 的时候也会返回’object’,所以我们可能需要这样if(a && typeof a == 'object')
  • parseInt:这个方法遇到非数字时停止解析,而且如果首字母为 0 时,则是基于 8 进制了,我们可以带一个二参来作为基数
  • +:这个符号在由字符串的时候,结果就会返回字符串
  • 浮点数:浮点数的相加,JS 是会有 bug 的,这个很正常,因为数据其实是二进制的原因,我们可以先乘以系数转化为整数,计算出来之后再除以系数
  • NaN:是个很神奇的,typeof NaN === ‘number’居然是 true。
  • 假值:0,NaN,’’,false,null,undefined 这些在 if 判断里面都是假的
  • hasOwnProperty:这个一般用来 for in 遍历时过滤用的,但是这个是方法,可能会被人重写

糟粕

==和===

高级类型:两者相同,都是进行指针地址比较

基本类型:

  • 全等于会先比较类型,类型不同直接不等
  • == 会尝试类型的转化,再进行值的比较
  • 如果是字符串和数字,会转化为数字
  • 如果有一个是布尔型,会把布尔型转化为数字
  • 如果是对象与字符串或者数字的比较,那就会根据 toString 或者 valueof 的值来比较

null 和 undefined 是相等的

总之总结就是尽量使用全等于

ES6 有 Object.is 方法,差不多与===类似,只有+0 不等于-0 以及 NaN 等于自身这两点

with 语句

这个语句本身是延长了作用域链,但是很严重的影响了性能,而且也容易混淆,属性访问的到底是哪个

eval

这个语句也会大大地影响性能,因为这个多了一次编译的过程,性能显著降低

continue 语句

说是这个语句通过重构之后移除这个性能都是得到改善…

switch 穿越

就是说 switch 都写上终止语句,不然很容易导致穿越。最糟糕的特性就像是带刺的玫瑰,有用的,但是是危险的。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 981909093@qq.com

文章标题:js语言精粹-附录

文章字数:735

本文作者:泽鹿

发布时间:2019-08-28, 16:45:23

最后更新:2019-08-28, 16:45:23

原始链接:http://panyifei.github.io/2019/08/28/读书笔记/Javascript语言精粹/附录/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏