《Javascript 密码花园》 笔记
本笔记只记录本人易模糊的知识点,其他略过。
对象
JavaScript
中所有变量都可以当作对象使用,除了两个例外null
和undefined
。由于
JavaScript
解析器的一个错误,数字的字面值(literal)当作对象解析时报错:js2.toString(); // 出错:SyntaxError // 变通写法 2..toString(); // 第二个点号可以正常解析 2 .toString(); // 注意点号前面的空格 (2).toString(); // 2先被计算
有两种方式来访问对象的属性,点操作符或者中括号操作符。中括号还适合动态属性等。
删除属性的唯一方法是使用
delete
操作符。不要扩展内置类型的原型,除非是为了和新的
JavaScript
引擎兼容。
函数
命名函数的赋值表达式
jsvar foo = function bar() { bar(); // 正常运行 }; bar(); // 出错:ReferenceError
不要使用
arguments.callee
和它的属性。推荐使用匿名包装器(自执行的匿名函数)来创建命名空间。这样不仅可以防止命名冲突,而且有利于程序的模块化。
数组
- 为了更好的性能,推荐使用普通的
for
循环并缓存数组的length
属性。
类型
- 强烈推荐使用严格等于操作符。如果类型需要转换,应该在比较之前显式的转换, 而不是使用语言本身复杂的强制转换规则。
- 为了检测一个对象的类型,强烈推荐使用
Object.prototype.toString
方法; 因为这是唯一一个可依赖的方式。 instanceof
操作符应该仅仅用来比较来自同一个JavaScript
上下文的自定义对象。
核心
- 绝对不要使用
eval
,任何使用它的代码都会在它的工作方式,性能和安全性方面受到质疑。 99.9% 使用eval
的场景都有不使用eval
的解决方案。
其他
- 绝对不要使用字符串作为
setTimeout
或者setInterval
的第一个参数。 - 避免使用
setInterval
,可以在回调函数内部使用setTimeout
。