兩道題有趣的題考驗你的js知識,80%的人都不知道答案

語言: CN / TW / HK

我正在參加「掘金·啟航計劃」

企業微信截圖_16653977977940.png

前言:

作為前端開發工程師,JavaScript是我們主要的開發語言,是每個人必須要掌握的,它是弱型別語言,本身語法也比較簡單,但是在我們平時使用中也會遇到很多奇奇怪怪的問題,下面分享了兩個比較有意思的題目,希望對大家有所幫助同時歡迎討論指出問題!

1.[,,,].length返回什麼?

[, , ,].length //3

這裡考的知識點就是稀疏陣列

稀疏陣列:是指索引不連續,陣列長度大於元素個數的陣列,換句話說就是有空襲的陣列。稀疏陣列訪問速度慢,記憶體利用率高。

示例如下:

``` 以下全是稀疏陣列: 1.宣告一個沒有元素的陣列 var arr = new Array(3); 2.宣告一個空陣列,給空陣列賦值 var arr1 = []; a[4] = 2; 3.陣列中有省略值 var arr2 = [, , ]; var arr3 = [0, , ]; 4.刪除陣列 var arr4 = [0, 1, 2, 3]; delete a[3] // [0,1,2,empty]

[undefined] // 不是稀疏陣列 ```

empty:陣列的空元素empty表示空位, 它不是一種資料型別, 而是由於人為修改arr.length 或者寫入時多寫了逗號造成的

undefined:undefined是一種資料型別, 在陣列中表示這個位置的值未定義, 但它仍然指向某個記憶體地址, 這個記憶體地址指向的是undefined;

使用陣列的forEach()方法遍歷時會自動忽略空位, 而使用for迴圈則會將empty轉換為undefined並遍歷。

2.[1,2,3]+[4,5,6]返回什麼?

[1,2,3]+[4,5,6]; //'1,2,34,5,6' [1, 2, 3] + [, 4, 5, 6]; // -> "1,2,3,4,5,6" [1, 2, 3, ""] + [4, 5, 6]; // -> "1,2,3,4,5,6"

這裡考的知識就是:當值與空字串相加運算時,加號運算子會先自動轉義為字串。

此出是把陣列轉化為字串在相加

``` 轉化前 --> 轉化後

1.數字轉為為字串:返回數字本身 1 -> "1" 0 -> "0"

2.布林值轉換為字串:返回字串 “true” 或 “false” true -> "true" false -> "false"

3.陣列轉換為字串: 返回陣列元素列表,以逗號分隔。如果是空陣列,則返回空字串 [1,2,3] -> '1,2,3' [1,2,3,] -> '1,2,3' [1,2,3,,] -> '1,2,3,' [1,2,3,''] -> '1,2,3,'

4.函式轉換為字串: 返回函式的具體程式碼字串 function(){return 1;}; -> "function (){return 1;}"

5.特殊字元 undefined -> "undefined" null -> "null" NAN -> "NAN" Infinity -> "Infinity" ```