提示:这是一道很比较绕的题目。。。
下面结果为不为真的表达式是
A null == undefined
B [1,2,3].splice(1,1,1) == [2]
C let Mi = new Function();Mi.proto.proto == Object.prototype
D ‘1’ === true
答案:
B [1,2,3].splice(1,1,1) == [2]
‘1’ === true
解析:
A是true,因为判断符号不是全等,但是如果是全等的话,得到的会是false
console.log(null == undefined);//true
console.log(null === undefined);//false
B [1,2,3].splice(1,1,1) == [2] ,虽然看起来结果似乎没问题,但是splice返回的是Number类型,并非Array
C 重点来了,为了更清晰地罗列之间的关系,采用逐条分析地形式来解释:
- 在js中如果A对象是由B函数构造的,那么A.proto === B.prototype,javascript中函数是由Function创建的。
console.log(Mi.__proto__ === Function.prototype);//true
- 内置的Function也是一个函数对象,它是通过自己来创建自己的。(怪不得总被吐槽前端妖魔化QAQ)
Function.__proto__ === Function.prototype//true
- Function.prototype是个特例,它是函数对象。但是没有prototype属性。其他所有函数都有prototype属性。javascript中对象是由Object创建的。
console.log(Function.prototype.__proto__ === Object.prototype);//true
- 由之前内容可以得到
console.log(Mi.__proto__.__proto__ == Object.prototype);//true
D 字符1被布尔转化为true,除了0, -0, null, undefined,“ ”之外,所有的元素都会被转为true
题目链接:https://www.nowcoder.com/profile/944791348/test/37063001/323513#summary