JS笔试题
JS 引用相关题目
以下代码输出什么? 为什么?
1 var a = {n:1}; 2 var b = a; 3 a = {n:2}; 4 a.x = a ; 5 console.log(a.x); 6 console.log(b.x);
1 var a = {n:1}; 2 var b = a; 3 a.x = a = {n:2}; 4 console.log(a.x); 5 console.log(b.x);
第一个问题:
a.x ---> {n:2,x:a}; b.x ---> undefined;
解答:a的值很清晰了,a第二次赋值以后变成了{n:2},随后添加了x属性指向自身。而对于b,在a第二次赋值以后,由于js中给变量赋值为object类型时,变量中存储的是对这个object的引用。
此时,a指向{n:2} ,而b指向了{n:1} ,a和b指向不同的对象,因此,在a上添加属性对于b无影响,b.x自然就是undefined。
第二个问题:
解答:第三句里的主要难点在js运算符的优先级,访问属性、调用方法运算符"."的优先级高于赋值运算符。因此执行顺序是
- 给a添加属性x,此时a,b都是 { n:1,x:undefined }a.x 运算后的结果即为这个object(可以说也就是b)的x属性值。
- 把{n:2}赋值给a,此时a是 {n:2} ,b是{ n:1,x:undefined }。这个时候a.x 已经运算完了,不会再与a产生任何关系,a.x依旧代表那个n为1对象的x属性值,和a已经没关系了。
- 把{n:2}赋值给a.x 也就是 { n:1,x:undefined }这个对象的x属性,这个时候b依旧指向这个object,因此此时,a是{n:2},b是{n:1,x:{n:2}}
JS 运算符优先级相关题目
如下代码输出什么? 解释原因
1 var object1 = { 2 valueOf: function () { 3 return 1; 4 }, 5 toString: function () { 6 return "object1"; 7 } 8 }; 9 10 var object2 = { 11 valueOf: function () { 12 return 2; 13 }, 14 toString: function () { 15 return "object2"; 16 } 17 }; 18 19 alert((object2 > object1 +-- object1) + true); //输出什么? 解释原因
(object2 > object1 +-- object1) + true);
先算大于号obj2 > obj1 == 2 > 1 == true;
=>true + -- obj1 == true + --1 == true + 0 == 1 + 0 == 1;
=>1 + true == 1 + 1 == 2
故输出2
1KB为什么等于1024B而不是1000B?
请说明原因(公式推倒+文字描述),另外,怎么解释硬盘标的量没有实际多,运营商的10M带宽指的是哪种?
- 硬盘的标量是按照1KB==1000B计算的,以此计算,标量1TB的硬盘实际使用量是:0.976TB
- 10Mb/s == 1.25MB/s (八位一比特)。
- 1KB = 2 ^ 10 B = 1024B