Skip to content

《Javascript 密码花园》 笔记

《Javascript 密码花园》

本笔记只记录本人易模糊的知识点,其他略过。

对象

  • JavaScript 中所有变量都可以当作对象使用,除了两个例外 nullundefined

  • 由于 JavaScript 解析器的一个错误,数字的字面值(literal)当作对象解析时报错:

    js
      2.toString(); // 出错:SyntaxError
      // 变通写法
      2..toString(); // 第二个点号可以正常解析
      2 .toString(); // 注意点号前面的空格
      (2).toString(); // 2先被计算
  • 有两种方式来访问对象的属性,点操作符或者中括号操作符。中括号还适合动态属性等。

  • 删除属性的唯一方法是使用 delete 操作符。

  • 不要扩展内置类型的原型,除非是为了和新的 JavaScript 引擎兼容。

函数

  • 命名函数的赋值表达式

    js
    var foo = function bar() {
      bar(); // 正常运行
    };
    bar(); // 出错:ReferenceError
  • 不要使用 arguments.callee 和它的属性。

  • 推荐使用匿名包装器(自执行的匿名函数)来创建命名空间。这样不仅可以防止命名冲突,而且有利于程序的模块化。

数组

  • 为了更好的性能,推荐使用普通的 for 循环并缓存数组的 length 属性。

类型

  • 强烈推荐使用严格等于操作符。如果类型需要转换,应该在比较之前显式的转换, 而不是使用语言本身复杂的强制转换规则。
  • 为了检测一个对象的类型,强烈推荐使用 Object.prototype.toString 方法; 因为这是唯一一个可依赖的方式。
  • instanceof 操作符应该仅仅用来比较来自同一个 JavaScript 上下文的自定义对象。

核心

  • 绝对不要使用 eval,任何使用它的代码都会在它的工作方式,性能和安全性方面受到质疑。 99.9% 使用 eval 的场景都有不使用 eval 的解决方案。

其他

  • 绝对不要使用字符串作为 setTimeout 或者 setInterval 的第一个参数。
  • 避免使用 setInterval,可以在回调函数内部使用 setTimeout