题目在这里,请点击跳转 题目
1. A
使用点语法的话,mouse 没有 bird 这个 key,这也就意味着 mouse.bird 是 undefined。然后当我们使用点语法 mouse.bird.size 时,因为 mouse.bird 是 undefined,这也就变成了 undefined.size。这个行为是无效的,并且会抛出一个错误类似 Cannot read property "size" of undefined。
2.B
对象的键被自动转换为字符串。我们试图将一个对象 b 设置为对象 a 的键,且相应的值为 123。
然而,当字符串化一个对象时,它会变成 "[object Object]"。因此这里说的是,a["[object Object]"] = 123。然后,我们再一次做了同样的事情,c 是另外一个对象,这里也有隐式字符串化,于是,a["[object Object]"] = 456。
然后,我们打印 a[b],也就是 a["[object Object]"]。之前刚设置为 456,因此返回的是 456。
3.A
删除一个不存在的属性,delete不报错,而且返回true。
4.B
obj1 = obj 引用的是栈中保存的地址,一个改变,另外一个也会改变。当obj1 = {} 已经对ob1 重新赋值了,开辟了一个新的内存空间,和obj已经没有任何关联。
4.1 C
如果你有两个名称相同的键,则键会被替换掉。它仍然位于第一个键出现的位置,但是值是最后出现那个键的值。
5.
8种数据类型 number string boolean undefined null object symbol Bigint
NaN === NaN // false
typeof NaN // number
typeof null // object
typeof typeof 1 // string
null == undefined //true
""== 0 // true
1 + null // 1
'1' + null // 1null
Number(null) // 0
Number("") // 0
[]==0 // true
[]==![] // true
[]==false // true
解析 请参考我的这篇文章 js数据类型知多少
6.C
new Number() 是一个内建的函数构造器。虽然它看着像是一个 number,但它实际上并不是一个真实的 number:它有一堆额外的功能并且它是一个对象。
当我们使用 == 操作符时,它只会检查两者是否拥有相同的值。因为它们的值都是 3,因此返回 true。
然后,当我们使用 === 操作符时,两者的值以及类型都应该是相同的。new Number() 是一个对象而不是 number,因此返回 false。
7. A
解析 请参考文章
8. A
解析 请参考文章
9. A
解析 请参考文章
10 B
解析 请参考文章
11.C
解析 请参考文章
12.D
解析 请参考文章
13
console.log(b.n); // 1
console.log(b.m); // undefined
console.log(c.n); // 2
console.log(c.m); // 3
解析 请参考文章
14
chimmy
15
student.doSth(); // 'chimmy'
student.doSth2(); // 'chimmy'
student.doSth3(); // 'jimmy'