var a = [];
var b = a;
b[0] = 1;
console.log(a[0]);
console.log(b[0]);
console.log(a===b);
上述代码的结果分别为:
1
1
true
将对象赋值给变量,仅仅是赋值的引用,对象本身并没有赋值一次,因此,变量a和b指向同一个数组
10 + "objects"
"7" * "4"
1 - "x"
1 + {}
true + true
2 + null
10objects //转换为字符串
28 //转换为字符
NaN //无法转换为数值进行计算,因此返回 NaN
1[object Ojbect] //返回对象的 toString()结果,按照字符串相加
2 //bool 类型转换为数值类型
2 //null 转换为数值 0
var a = 2;
var obj = { x: 1, y: { z: 2} };
var n = [obj,3,[4,5]];
console.log(a << 2);
console.log(obj["y"].z);
console.log(n[0].y["z"]);
console.log(n[2]["1"]);
delete n[0];
console.log(n[0].x);
8
2
2
5
console.log(n[0].x);此行代码错误,无法输出有效信息,会输出Error信息
上述代码运行后,变量 x、y和z的值为多少?
var x = 10;
var y = 20;
var z = x < y ? x++ : ++y;
上述代码运行后,变量x的值为 11;变量y的值为20;变量z的值为10。
这是因为,运行第三行代码时,只执行?后的第一个语句,因此,y的值不发生变化,仍为 20;并返回 x 的值赋值给变量z,因此z的值为 10;然后将 x 的值增加1,变为 11。
上述代码运行后,将产生有效输出,还是代码错误?
var empAge = 20;
var empName;
if (empAge > 20 && empName.length > 0) {
console.log(1);
}
else {
console.log(2);
}
上述代码运行,会输出 2,而不会发生错误。
这是因为, if 条件中的逻辑表达式的第一个条件(empAge > 20)不满足,会返回 false,此时,将发生“逻辑短路”,而不会继续判断下一个条件。因此,即使下一个条件中的变量empName没有赋值,此时如果计算empName.length 将发生错误;但是,因为发生了“逻辑短路”,不会计算此表达式,因此不会发生错误。
既然 if 条件中的逻辑表达式返回 false,则运行 else 语句:输出 2。
写出下列代码的输出结果:
var x = "global";
function test() {
var x = "local";
return x;
}
console.log(test());
上述代码的输出结果为 local。这是因为,在函数 test() 体内,局部变量的优先级高于同名的全局变量。因此,如果在函数体内声明的局部变量和全局变量重名,则以局部变量优先。因此,调用函数 test() 时,返回的是局部变量x,其值为 local。