JavaScript面試數(shù)組index和對(duì)象key問(wèn)題詳解
面試題一:
var arr = [1, 2, 3, 4]
問(wèn):arr[1] = ?; arr['1'] = ?
答:arr[1] = 2; arr['1'] = 2
這里可以再分為兩個(gè)問(wèn)題:
1、數(shù)組賦值
var arr = [1, 2, 3, 4]
arr[1] = 10; // 數(shù)字場(chǎng)景
arr['10'] = 1; // 字符串場(chǎng)景
arr['a'] = 1; // 字符串場(chǎng)景
arr[true] = 2; // 布爾值
arr[undefined] = 3; // undefined
arr[null] = 4; // null
arr[Symbol] = 5; // Symbol
arr[new Object()] = 6; // 對(duì)象
arr[function(){}] = 7 // 函數(shù)
打印結(jié)果:

結(jié)果說(shuō)明,修改數(shù)組的值的過(guò)程中,下標(biāo)index如果是數(shù)字,那么,就是正常的數(shù)組賦值。
如果是非數(shù)字,那么會(huì)將其轉(zhuǎn)換為字符串,其實(shí)數(shù)組也是對(duì)象,那么,非數(shù)字就相當(dāng)于給對(duì)象arr的key鍵定義的value值。
2、數(shù)組取值
通過(guò)上述方式先為數(shù)組賦值,然后再通過(guò)以下方式取值:
console.log(arr[1]); // 10
console.log(arr['10']); // 1
console.log(arr[true]); // 2
console.log(arr[undefined]); //3
console.log(arr[null]); // 4
console.log(arr[Symbol]); // 5
console.log(arr[new Object()]); // 6
console.log(arr[function(){}]); // 7
由打印的結(jié)果可以看出,數(shù)組在取值時(shí)索引是數(shù)字,按照數(shù)組取值方式獲取。
如果索引位置是非數(shù)字,會(huì)將其轉(zhuǎn)換成字符串,通過(guò)對(duì)象的方式取值。
所以題目中的arr['1']會(huì)轉(zhuǎn)換成arr[1],最終獲取到的值為2。
面試題二:
var obj = {
0: 1,
1: 2,
2: 3
}
問(wèn):obj[1] = ?; obj['1'] = ?
答:obj[1] = 2; obj['1'] = 2
這里也可以再分為兩個(gè)問(wèn)題:
1、對(duì)象賦值
var obj = {
0: 1,
1: 2,
2: 3
}
obj[1] = 10; // 數(shù)字場(chǎng)景
obj['10'] = 1; // 字符串場(chǎng)景
obj['a'] = 1; // 字符串場(chǎng)景
obj[true] = 2; // 布爾值
obj[undefined] = 3; // undefined
obj[null] = 4; // null
obj[Symbol] = 5; // Symbol
obj[new Object()] = 6; // 對(duì)象
obj[function () {}] = 7 // 函數(shù)
打印結(jié)果:

可以看出,對(duì)象賦值的時(shí)候,如果key值不是字符串,會(huì)將其轉(zhuǎn)換成字符串。
2、對(duì)象取值
通過(guò)上述方式先為對(duì)象賦值,然后再通過(guò)以下方式取值:
console.log(arr[1]); // 10
console.log(arr['10']); // 1
console.log(arr[true]); // 2
console.log(arr[undefined]); //3
console.log(arr[null]); // 4
console.log(arr[Symbol]); // 5
console.log(arr[new Object()]); // 6
console.log(arr[function(){}]); // 7
由打印的結(jié)果可以看出,對(duì)象在取值時(shí),如果當(dāng)前key值不是字符串,會(huì)將其轉(zhuǎn)換成字符串,再取值。
所以題目中的arr[1]會(huì)轉(zhuǎn)換成arr['1'],最終獲取到的值為2。
總結(jié)
對(duì)象的下標(biāo)如果不是字符串,會(huì)將其先轉(zhuǎn)換成字符串,再去求值。數(shù)組的下標(biāo)如果不是數(shù)字,先將其嘗試轉(zhuǎn)成數(shù)字去取值;如果轉(zhuǎn)不成數(shù)字,則會(huì)利用數(shù)組也是對(duì)象的特點(diǎn),將其轉(zhuǎn)換成字符串,再去取值。
以上就是JavaScript面試數(shù)組index和對(duì)象key問(wèn)題詳解的詳細(xì)內(nèi)容,更多關(guān)于JavaScript數(shù)組index對(duì)象key的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaScript與JQuery框架基礎(chǔ)入門教程
這篇文章主要介紹了jQuery和JavaScript入門基礎(chǔ)知識(shí)學(xué)習(xí)指南,jQuery是當(dāng)下最主流人氣最高的JavaScript庫(kù),需要的朋友可以參考下2021-07-07
微信小程序支付之c#后臺(tái)實(shí)現(xiàn)方法
這篇文章主要介紹了微信小程序支付之c#后臺(tái)實(shí)現(xiàn)方法的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10
微信小程序 動(dòng)態(tài)的設(shè)置圖片的高度和寬度詳解及實(shí)例代碼
這篇文章主要介紹了微信小程序 動(dòng)態(tài)的設(shè)置圖片的高度和寬度詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02
微信小程序 解決請(qǐng)求服務(wù)器手機(jī)預(yù)覽請(qǐng)求不到數(shù)據(jù)的方法
這篇文章主要介紹了微信小程序 解決請(qǐng)求服務(wù)器手機(jī)預(yù)覽請(qǐng)求不到數(shù)據(jù)的方法的相關(guān)資料,配置https時(shí),要使用443端口,就可以解決,需要的朋友可以參考下2017-01-01
微信小程序 開(kāi)發(fā)之快遞查詢功能的實(shí)現(xiàn)
這篇文章主要介紹了微信小程序 開(kāi)發(fā)之快遞查詢功能的實(shí)現(xiàn)的相關(guān)資料,這里實(shí)現(xiàn)微信小程序查詢快遞的功能,需要的朋友可以參考下2017-01-01
微信小程序 選項(xiàng)卡的簡(jiǎn)單實(shí)例
這篇文章主要介紹了微信小程序 選項(xiàng)卡的簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05

