1. var a;
var b = a * 0;
if (b == b) {
console.log(b * 4 + '2' - 0 + 2);
} else {
console.log(!b * 4 + '2' - 0 + 2);// !b = 1;
}
解答: a声明为赋值,结果为undefined b=a*0,undefined*0结果为 NaN ,NaN与NaN不相等故而执行else里的代码 b隐式转换布尔值为false ,而false转换为数字为0,故而!b=1;
所以不难得出结果为44.
2.
var obj = {proto : {a:1,b:2}};
function F () {};
F.prototype = obj.proto;
var f = new F();
obj.proto.c = 3;
obj.proto = {a:-1,b:-2};
console.log(f.a);
console.log(f.c);
delete F.prototype['a'];
console.log(f.a);
console.log(obj.proto.a);
解答: F为构造函数 ,第三行代码将obj的proto属性赋给了F的原型, 而f为F的实例对象,故而f.a结果为obj里的a的值,也就是1;
而复杂数据类型直接传递的是指针,也就是说在obj的proto中加入 属性c,那么F的原型中也会有c属性,故而f.c的值为3;
在F的原型中删除了a属性,f为F的实例对象,故而删除 之后f.a的值为undefined;
而后obj的指针方向发生了改变,所以obj.proto.a的结果为 -1;
3.
<ul>
<li id="1">1</li>
<li id="2"></li>
<li id="3">1</li>
<li id="4"></li>
<li id="5"></li>
<li id="6"></li>
<li id="7">1</li>
</ul>
var lis = document.getElementsByTagName('li');
for (var i = 0; i < lis.length; i++) {
if (lis[i].innerHTML == '') {
lis[i].parentNode.removeChild(lis[i]);
}
}
因为少了一个i--; 所以当i = 0的时候检查失败继续执行,i=1时检查成功删除索引为1的li结构,i从2开始查找 id为5的但是内容为空的li最后被剩下了
4.输出结果是多少
( function test () {
var a = b = 5;
var c = 5, d = 5; e = 5;
console.log(a) //自调用 函数内部都是5
console.log(b)
console.log(c)
console.log(d)
console.log(e)
})();
console.log(a) //报错
console.log(b) //隐式全局变量 5
console.log(c) //函数外访问不到 所以是报错了
console.log(d) //函数外访问不到 所以是报错了
console.log(e) ////隐式全局变量 5
5. 输出 结果是什么
var a = {
name: '小明'
};
var b = a;
a = {
name: '小王'
};
console.log(a.name);
console.log(b.name);
a重定向,指针发生了改变,原来的指针复制给了b,所以a.name为小王, b.name为小明
6.输出 结果是什么
if (!("t" in window)) {
var t = 1;
}
console.log(t);
输出 结果是 undefined
代码的含义是 如果window里没有t这个 属性就声明t并赋值1 但是 ==> js引擎会将var 提前 那么相当于代码变为
var t ;
if (! 't' in window) {
t = 1;
}
console.log(t);
声明提前之后,if 语句的判断结果为false,所以永远不会执行。故而结果为undefined