《js语言精粹》附录A:毒瘤の笔记

117 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情

阅读《JavaScript语言精粹》(修订版)的笔记记录,这章讲的是js一些难以避免的问题特性,我们有必要知道这些问题并准备好应对的措施。

  • 全局变量 程序越大越难管,可靠性低。 以前不是严格模式的时候,可以这样foo=value,没有声明,查bug困难。 【现在基本都是严格模式】
  • 作用域 以前有块级语法,没有块级作用域 【es6有了】
  • 自动插入分号 没出现过
  • 保留字 像export可以被对象当属性,但是必须加引号,使用的时候不能直接点,要o['export']这样使用,我也没用过保留字来当属性就是了
  • Unicode 把一对字符视为一个单一的字符,js认为两个字符是两个不同的字符。 es6用括号解决 '\u{1F680}' === '\uD83D\uDE80'
  • typeof null = object奇葩,判断正则会返回对象或者函数。 判断null可以 o&&typeof o=='object'
  • parseInt 把字符串转整数,遇到非数字就停止解析,参数是16n16没有区别。如果第一个字符是0会导致字符串基于八进制求值。如时间解析时有必要带基数 parseInt('08',10) 不加 10就是返回0,加了返回8。parseInt(0x16)==22【但是我用浏览器测了不加也是返回8,也许是优化了。总之以后尽量加第二个参数。】
  • +运算符,可以用于加法和字符串连接,常常引起bug,如果是加法要确保两个运算数都是整数。 【同事教我学了个黑科技,就是 +'123' =>123 有时候我是直接这么转字符串能数字的】
  • 浮点数,二进制的浮点数不能正确处理十进制的小数,如0.1+0.2!==0.3,因为遵循的是二进制浮点数算术标准。
  • NaN,表示not a number,他不表示数字,但是typeof NaN === 'number',在把非数字形式的字符串转换成数字就会产生这个,和NaN计算的结果都是NaNNaN不等于本身,js提供了一个isNaN函数来判断,判断是否是数字可以用typeof value=='number'&&isFinite(value)筛选掉NaN
  • 伪数组,可以用 Object.prototype.toString.apply(value)==='[object Array]'检查是否是真数组
  • hasOwnProperty,对象的一个方法,可以被替换,有雷。
  • 对象不是真的空对象,所以小心点别用到继承的属性来存值什么的,如constructor 【我用Object.create(null) ok】