四、语句
4.1、for-in语句
for-in语句是一种精准的迭代语句,可以用来枚举对象的属性。语法如下所示:
for (property in expression) statement
// Example
// 每执行一次循环,都会将window对象中的属性名赋值给propName,直到window对象中的所有属性都被枚举一遍为止。
for (var propName in window) {
document.write(propName+'<br>');
}
注意:ES 对象的属性没有顺序。因此,通过 for-in 循环输出的属性名的顺序是不可预测的。具体来讲,所有属性都会被返回一次,但返回后的先后顺序可能会因浏览器而异。
在 ES5 中,当要迭代的对象的变量值为 null 或 undefined 时,for-in 语句不会再抛出错误,只是不会执行循环体。
4.2、with语句
with语句的作用是将代码的作用域设置到一个特定的对象中。
// example
var qs = location.search.substring(1);
var hostName = location.hostname;
var url = location.href;
// 使用with语句进行转换如下
// 在with语句的代码块内部,每个变量首先被认为值一个局部变量,
// 而如果在局部变量环境中找不到该变量的定义,
// 就会查询location对象中是否有同名的属性。
with(location) {
var qs = search.substring(1);
var hostName = hostname;
var url = href;
}
严格模式下不允许使用 with 语句,否者将视为语法错误。
4.3、switch语句
注意:switch语句中可以使用任何数据类型,无论是字符串,还是对象都没有问题。其次,每个case的值不一定是常量,可以是变量,甚至是表达式。
注意:switch语句在比较值时使用的都是全等操作符。
五、函数
如果return语句不带任何返回值,则函数停止执行将返回undefined值。
严格模式对函数有一些限制:
- 不能把函数名或参数名命名为 eval 或 arguments;
- 不能出现两个命名参数同名的情况。
5.1、理解函数参数
(1)ES函数不介意传递的参数个数和类型,即便定义的函数只接收两个参数,在调用这个函数时也未必一定要传递两个参数。
(2)arguments 对象只是与数组类似,可以使用方括号访问它的每一个元素,并使用 length 属性来确定参数的个数。
(3)arguments 对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数的个数决定的。
参考文献
[1] 《JavaScript高级程序设计(第3版)》