主要从《编写可维护的JavaScript》一书中摘取值得记录的片段。
第一部分: 编程风格
第一章: 基本的格式化
-
变量名应当总是遵守驼峰大小写命名法,并且命名前缀应当是名词。以名词作为前缀可以让变量和函数区分开来,因为函数名前缀应当是动词。
-
构造函数命名遵照大驼峰命名法(Pascal Case),这样可以将构造函数从变量和普通函数中区分出来。
-
null的应用场景:
- 用来初始化一个变量,这个变量可能赋值为一个对象。
- 用来和一个已经初始化的变量比较,这个变量可以是也可以不是一个对象。
- 当函数的参数期望是对象时,用作参数传入。
- 当函数的返回值期望是对象时,用作返回值传出。
注意: - 不要使用null来检测是否传入了某个参数
- 不要用null来检测一个未初始化的变量。
理解null最好的方式是将它当做对象的占位符。
第三章: 语句和表达式
- for-in循环是用来遍历对象的,一个常见的错误用法是使用for-in循环来遍历数组成员,入:
var values = [ 1, 2, 3, 4, 5, 6, 7],
i;
for (i in values) {
process(item[i]);
}
记住, for-in循环使用来对实例对象和原型链中的键(key)做遍历的,而不是用来遍历含数字 索引的数组。
第四章: 变量、函数和运算符
- 如果将数字和字符串进行比较,字符串会首先转换为数字,然后执行比较:
// 比较数字5和字符串5
console.log(5 == "5"); //true
// 比较数字25和十六进制的字符串25
console.log(25 == "0x19"); //true
- 如果一个布尔值和数字比较,布尔值会首先转换为数字,然后进行比较。false -> 0、true -> 1
// 数字1和true
console.log(1 == true); //true
// 数字0和false
console.log(0 == false); //true
// 数字2和true
console.log(2 == true); //false
- 如果其中一个值是对象而另一个不是,则会首先调用对象的valueOf()方法,得到原始类型值再进行比较。如果没有定义valueOf(),则调用 toString()。
var object = {
toString: function() {
return "0x19";
}
};
console.log(object == 25); //true
- 由于类型转换的缘故,推荐使用===和!===。用这些操作符作比较不会涉及强制类型转换。
网友评论