我们都知道数字可以作为数组的索引来使用,那如果我使用字符串,函数或者对象作为数组索引呢?
看到这段代码,我们可能会感到疑惑,我们使用字符串作为数组索引会出现问题吗?
这里我们就能引出,当我们使用数字,对象,函数等作为数组索引时,他会进行一个类型转换,会将这些都转换成一个字符串。
对象作为数组索引
let obj = { value: 1 }
let arr = []
arr[obj] = 2
console.log(arr["[object Object]"]);//2
上边我们将obj作为数组的索引来使用,那为什么我们输出arr[“[object Object]”]时会打印2呢?
我们可以输出一下obj.toString()
,打印的结果就是[object Object],根据我们上面提到的对象作为索引时会转换成字符串,所以我们这里输出的值为2
函数作为数组索引
function foo() {}
let arr = []
arr[foo] = 2
console.log(arr[foo]);//2
这里同理,我们输出foo.toString()后发现,输出的就是foo本身,所以我们这里输出的是2
那么到这里开头的这道题就很简单了,输出的是3 3