首頁 > 軟體

JavaScript面試陣列index和物件key問題詳解

2022-12-23 14:00:54

面試題一:

var arr = [1, 2, 3, 4]

問:arr[1] = ?; arr['1'] = ?

答:arr[1] = 2; arr['1'] = 2

這裡可以再分為兩個問題:

1、陣列賦值

var arr = [1, 2, 3, 4]
arr[1] = 10; // 數位場景
arr['10'] = 1; // 字串場景
arr['a'] = 1; // 字串場景
arr[true] = 2; // 布林值
arr[undefined] = 3; // undefined
arr[null] = 4; // null
arr[Symbol] = 5; // Symbol
arr[new Object()] = 6; // 物件
arr[function(){}] = 7 // 函數

列印結果:

結果說明,修改陣列的值的過程中,下標index如果是數位,那麼,就是正常的陣列賦值。

如果是非數位,那麼會將其轉換為字串,其實陣列也是物件,那麼,非數位就相當於給物件arrkey鍵定義的value值。

2、陣列取值

通過上述方式先為陣列賦值,然後再通過以下方式取值:

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

由列印的結果可以看出,陣列在取值時索引是數位,按照陣列取值方式獲取。

如果索引位置是非數位,會將其轉換成字串,通過物件的方式取值。

所以題目中的arr['1']會轉換成arr[1],最終獲取到的值為2

面試題二:

var obj = {
    0: 1,
    1: 2,
    2: 3
}

問:obj[1] = ?; obj['1'] = ?

答:obj[1] = 2; obj['1'] = 2

這裡也可以再分為兩個問題:

1、物件賦值

var obj = {
    0: 1,
    1: 2,
    2: 3
}
obj[1] = 10; // 數位場景
obj['10'] = 1; // 字串場景
obj['a'] = 1; // 字串場景
obj[true] = 2; // 布林值
obj[undefined] = 3; // undefined
obj[null] = 4; // null
obj[Symbol] = 5; // Symbol
obj[new Object()] = 6; // 物件
obj[function () {}] = 7 // 函數

列印結果:

可以看出,物件賦值的時候,如果key值不是字串,會將其轉換成字串。

2、物件取值

通過上述方式先為物件賦值,然後再通過以下方式取值:

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

由列印的結果可以看出,物件在取值時,如果當前key值不是字串,會將其轉換成字串,再取值。

所以題目中的arr[1]會轉換成arr['1'],最終獲取到的值為2

總結

物件的下標如果不是字串,會將其先轉換成字串,再去求值。陣列的下標如果不是數位,先將其嘗試轉成數位去取值;如果轉不成數位,則會利用陣列也是物件的特點,將其轉換成字串,再去取值。

以上就是JavaScript面試陣列index和物件key問題詳解的詳細內容,更多關於JavaScript陣列index物件key的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com