兩道題有趣的題考驗你的js知識,80%的人都不知道答案
我正在參加「掘金·啟航計劃」
前言:
作為前端開發工程師,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" ```