语句
- if语句会自动调用Boolean()转换函数将表达式的结果转换为一个布尔值
- for-in 循环输出的属性名的顺序是不可预测的,返回的先后次序可能因浏览器而异,如果要迭代的对象的变量值为null或undefined, for-in语句会抛出错误,ECMAScript5更正了这一行为;对这种情况不再抛出错误,而只是不执行循环体,为了兼容,在使用for-in循环之前,先检测该对象的值是不是null或undefined
- switch语句中可以使用任何数据类型,无论是字符串,还是对象都没有问题,其次,每个
- case的值不一定是常量,可以是变量,甚至是表达式
理解参数
可以向函数传递任意数量的参数,并且可以通过arguments对象来访问这些参数
-
- arguments对象只是与数组类似,但它不是Array的实例。虽然可以通过下标访问元素,通过length属性确定传递进来多少个参数,没有传递值的命名参数会自动被赋予undefined值
- ECMAScriptA中函数命名的参数只提供便利,但不是必需的;另外,在命名参数方面,其他语言可能需要事先创建一个函数签名,而将来的调用必须与该签名一致,但在ECMAScript中,没有这些条条框框,解析器不会验证命名参数
- ECMAScript中的所有参数传递的都是值,不可能通过引用传递参数
- 关于arguments的行为,还有一点比较有意思。那就是它的值永远与对应命名参数的值保持同步。因为arguments对象中的值会自动反映到对应的命名参数,不过这并不是说读取这两个值会访问相同的内存空间,它们的内存空间是独立的,但它们的值会同步。但这种影响是单向的:修改命名参数不会改变arguments中对应的值;另外,arguments对象的长度是由传入的参数个数决定的,不是由定义函数时的命名参数个数决定的,如果只传入一个参数,那么arguments[1]设置的值不会反应到命名参数中去。
- 严格模式中,对arguments赋值会变得无效,其次,重写arguments会导致语法错误
- 通过检查传入参数的类型和数量并作出不同的反应,可以模仿方法的重载
时间: 2024-10-21 04:47:26