1. 逻辑或(||)运算有一个特点, a || b,当a为false的时候,如果b为对象,则直接返回b。利用这一特征,我们在给对象赋值的时候,为了防止赋空值可以使用下面赋值语句。
var myObject = preObject || backObject;
这样如果preObject不是空,就把preObject赋值给myObject,否则把backObject赋值给myObject。
2. javascript 函数不存在方法签名,因此也不存在重载。javascript中的函数定义时可以没有任何参数,在调用的时候仍然可以为其传入任意数量的参数,js的内部机制是通过一 个数组来接收所有传入的参数。因此可以在方法内部通过数组arguments来进行参数的引用。定义函数时的参数只是为了引用时候的方便以及代码的提示作用,可以理解为更 加容易阅。当然如果一个函数在定义的时候如果限定了参数,调用的时候仍然可以传入任意个数的参数。如下代码:
function test01(a, b) {
a = "hello";
b = "world";
alert("a = " + arguments[0]); //将会输出 a = hello
alert("b = " + arguments[1]); //将会输出 b = world
}
当通过arguments引用函数传入的参数时,如果参数在函数内部被改变,那么通过arguments引用的参数也是被改变后的参数:
function test02(a) {
a = 'hello world';
alert(arguments[0]);
}
// 调用函数并且传入参数hello
// function('hello');
// 此处调用test时传入的参数虽然是“hello”,但是参数的值在函数内部被改变,因此
// 通过argumen[0]应用参数的时候,其值也是被修改后的
同样的,如果在函数内部通过arguments修改了参数的值,在通过参数名称访问参数的时候,其只也是被修改后的。如下代码:
fucntion test03(a) {
a = 1;
arguments[0] = 2;
alert(a);
}
/*
*调用test03函数并且传入参数3
*test03(3);
*函数会输出2
*/