Javascipt笔记之--数组

有些开发者习惯将常量写在运算符的左边,这样的话,一旦不小心将相等运算符写成赋值运算符,就会报错,因为常量不能被赋值。
if (x = 2) { // 不报错 if (2 = x) { // 报错

需要注意的是,switch语句后面的表达式与case语句后面的表示式,在比较运行结果时采用的是严格相等运算符(===),而不是相等运算符(==),这意味着比较时不会发生类型转换。
var x = 1; switch (x) { case true: console.log('x发生类型转换'); default: console.log('x没有发生类型转换');} // x没有发生类型转换

注意,JavaScript的标识名区分大小写,所以undefinednull不同于UndefinedNull
(或者其他仅仅大小写不同的词形),后者只是普通的变量名。

如果JavaScript预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为false,其他值都视为true。

undefined null false 0 NaN ""或''(空字符串)

布尔值往往用于程序流程的控制,请看一个例子。

if ('') { console.log(true);} // 没有任何输出

上面代码的if命令后面的判断条件,预期应该是一个布尔值,所以JavaScript自动将空字符串,转为布尔值false,导致程序不会进入代码块,所以没有任何输出。需要特别注意的是,空数组([])和空对象({})对应的布尔值,都是true。
if ([]) { console.log(true);} // true if ({}) { console.log(true);} // true

将数组清空的一个有效方法,就是将length属性设为0。

需要注意的是,for...in会遍历数组所有的键,即使是非数字键。
var a = [1, 2, 3]; a.foo = true; for (var key in a) { console.log(key);} // 0 // 1 // 2 // foo

上面代码在遍历数组时,也遍历到了非整数键foo。所以,使用for...in遍历数组的时候,一定要小心。

delete命令不影响length属性。
var a = [1, 2, 3]; delete a[1];delete a[2]; a.length // 3
上面代码用delete命令删除了两个键,对length属性没有影响。也就是说,length属性不过滤空位。所以,使用length属性进行数组遍历,一定要非常小心。

你可能感兴趣的:(Javascipt笔记之--数组)