JavaScript面試數(shù)組index和對(duì)象key問題詳解
面試題一:
var arr = [1, 2, 3, 4]
問:arr[1] = ?; arr['1'] = ?
答:arr[1] = 2; arr['1'] = 2
這里可以再分為兩個(gè)問題:
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é)果說明,修改數(shù)組的值的過程中,下標(biāo)index
如果是數(shù)字,那么,就是正常的數(shù)組賦值。
如果是非數(shù)字,那么會(huì)將其轉(zhuǎn)換為字符串,其實(shí)數(shù)組也是對(duì)象,那么,非數(shù)字就相當(dāng)于給對(duì)象arr
的key
鍵定義的value
值。
2、數(shù)組取值
通過上述方式先為數(shù)組賦值,然后再通過以下方式取值:
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)換成字符串,通過對(duì)象的方式取值。
所以題目中的arr['1']
會(huì)轉(zhuǎn)換成arr[1]
,最終獲取到的值為2
。
面試題二:
var obj = { 0: 1, 1: 2, 2: 3 }
問:obj[1] = ?; obj['1'] = ?
答:obj[1] = 2; obj['1'] = 2
這里也可以再分為兩個(gè)問題:
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ì)象取值
通過上述方式先為對(duì)象賦值,然后再通過以下方式取值:
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問題詳解的詳細(xì)內(nèi)容,更多關(guān)于JavaScript數(shù)組index對(duì)象key的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JS前端并發(fā)多個(gè)相同的請(qǐng)求控制為只發(fā)一個(gè)請(qǐng)求方式
這篇文章主要為大家介紹了JS前端并發(fā)多個(gè)相同的請(qǐng)求控制為只發(fā)一個(gè)請(qǐng)求方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07采用CSS和JS,剛好我最近有個(gè)站點(diǎn)要用到下拉菜單!
采用CSS和JS,剛好我最近有個(gè)站點(diǎn)要用到下拉菜單!...2006-06-06一款功能強(qiáng)大的markdown編輯器tui.editor使用示例詳解
這篇文章主要為大家介紹了一款功能強(qiáng)大的markdown編輯器tui.editor使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02

web?worker在項(xiàng)目中的使用學(xué)習(xí)為項(xiàng)目增加亮點(diǎn)

Servlet3.0與純javascript通過Ajax交互的實(shí)例詳解

字節(jié)飛書面試promise.all實(shí)現(xiàn)示例

基于遷移學(xué)習(xí)的JS目標(biāo)檢測(cè)器構(gòu)建過程詳解