分享一个js对象的基础面试题,考验Object的一些特性
// 片段1
let a = {name: 'Sam'}
let b = {name: 'Tom'}
const o = {}
o[a] = 1
o[b] = 2
console.log(o[a])
看到这儿,大多数伙计们应该猜到考点是啥了,有疑问的小伙伴可以自行在控制台运行一下结果,看看是否是自己所期待的。 对了答案的意料之外的伙计可以思考一下为什么,也别急着去Google,先在脑子中回忆一下object属性名有哪些特点,咱们接着运行下一段稍微有点差别的代码,看看是否对自己有点启发:
// 片段2
let a = {name: 'Sam'}
let b = {name: 'Tom'}
let c = {name: 'Cat'}
const o = {}
o[a] = 1
o[b] = 2
o[c] = 3
console.log(o[a])
对比下片段1和片段2,打印结果分别是2和3,暂时得到一个结论就是,最终的打印结果是最后一次所赋值,外?回想下Object属性名的特性,那就是最基本的,必须为字符串,或者最终为字符串,到这里我们接着在控制台分别打印a/b/c以及对象o看看:
// 片段3
let a = {name: 'Sam'}
let b = {name: 'Tom'}
let c = {name: 'Cat'}
const o = {}
o[a] = 1
o[b] = 2
o[c] = 3
console.log(o[a])
console.log(o[b])
console.log(o[c])
console.log(o)
结果如下:
相信到这里很多小伙伴已经恍然大悟了,尤其是看到o的打印,如果不够直观的话可以执行下,Object.keys(o),还有疑问的伙计接着往下,咱们分析下,
- 声明对象a,b,c,o值分别为4个不同的对象,o为空对象
- 分别将a,b,c的值作为属性名添加o的三个属性,分别赋予三个不同的值