JS Test(44道)總結

題目來自javascript-puzzlers

1.reduce


沒有設置初始值的空數組使用reduce方法會拋出錯誤
reduce的callback函數有四個參數,preValue,curValue,curValue-index,array,如果沒有設定初始值,reduce開始時第一個值為preValue,第二個為curValue

2.map&parseInt


map默認參數有兩個,回調函數和回調函數的this值
該回調函數有三個默認值,curValue、index和array
parseInt()可以傳有兩個參數值,string和radix(基數)



parseInt()的radix為0時,算作基數為10

3.運算符順序

三元運算符優(yōu)先級低于+運算符

4.JS中能表示的最大整數


2^53是JS能正確計算而不失精度的最大整數,再加就丟失精度無法判斷大小了

5.稀疏數組


js中,當數組為稀疏數組時,遍歷數組時會跳過“坑位”,如圖數組中
0 in array //true
3 in array //false
根據Array.prototype.map 的 polyfill.可以看出

Array.prototype.map = function(callback, thisArg) {
        var T, A, k;
        if (this == null) {
            throw new TypeError(' this is null or not defined');
        }

        var O = Object(this);
        var len = O.length >>> 0;
        if (typeof callback !== 'function') {
            throw new TypeError(callback + ' is not a function');
        }
        if (arguments.length > 1) {
            T = thisArg;
        }
        A = new Array(len);
        k = 0;
        while (k < len) {
            var kValue, mappedValue;
            if (k in O) {   //attention! 首先檢查這個索引值是不是數組的一個屬性
                kValue = O[k];
                mappedValue = callback.call(T, kValue, k, O);
                A[k] = mappedValue;
            }
            k++;
        }
        return A;
    };

6.switch()中的表達式


嚴格比較時,String實例與字符串不一樣

7.余數的正負號隨第一個操作數

8.關于if() & == & === 的理解


if([]) 的含義:[]是否為“真值”
js里的“真值”很好判斷,因為“假值”總共只有6個:
false,undefined,null,0,""(空字符串),NaN
if([] == true) 的含義:[]與true是否相等。true會先轉換為1
使用==,在類型不同的情況下會進行類型轉換,然后再比較,
(注意null==undefined)
而使用===,絕對相等,需要類型相同并且值相同,比較前沒有操作

9.隱式轉換


[ ]==![ ]result為true
[] == !true // ! 操作符的優(yōu)先級高于 == ,所以先執(zhí)行 ! 操作
[] == false // !true 得到的是 false
[] == 0 //比較規(guī)則1:如果值為true或false,則轉成1或0來繼續(xù)比較
[] == 0 //執(zhí)行左側的 [] 的 valueOf 方法,而 [] 是對象,所以 [].valueOf() 返回本身 []
"" == 0 //執(zhí)行左側的 [] 的 toString 方法,[].toString() 返回 ""
0 == 0 //比較規(guī)則2:如果一個值是數字,一個值是字符串,則把字符串轉換為數字,再進行比較,"" 轉成數字是 0。
最終是執(zhí)行 0 == 0 ,結果為 true 。

10.

11.

12.arguments


但是!當函數參數涉及到 any rest parameters, any default parameters or any destructured parameters 的時候, 這個 arguments 就不在是一個 mapped arguments object 了.....

function sidEffecting(ary) {
  ary[0] = ary[2];
}
function bar(a,b,c=3) {
  c = 10
  sidEffecting(arguments);
  return a + b + c;
}
bar(1,1,1)     //12

13.prototype


f.prototype 是使用使用 new 創(chuàng)建的 f 實例的原型. 而 Object.getPrototypeOf 是 f 函數的原型.

a === Object.getPrototypeOf(new f()) // true
b === Function.prototype // true

14.function.name


Function.name
Functin.name是只讀屬性

15.emmmmmm...又是轉換

16.js數組


js允許數組最后一項帶一個,

17. Date


Date
Date/parse

18.function.length


一個function(Function 的實例)的 length 屬性就是函數簽名的參數個數, 所以 b.length == 0.另外 Function.length 定義為1.

19.神奇的min/max

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 工廠模式類似于現實生活中的工廠可以產生大量相似的商品,去做同樣的事情,實現同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 8,115評論 2 17
  • 如何控制alert中的換行?\n alert(“p\np”); 請編寫一個JavaScript函數 parseQu...
    heyunqiang99閱讀 1,139評論 0 6
  • 單例模式 適用場景:可能會在場景中使用到對象,但只有一個實例,加載時并不主動創(chuàng)建,需要時才創(chuàng)建 最常見的單例模式,...
    Obeing閱讀 2,311評論 1 10
  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創(chuàng)建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,667評論 0 4
  • 相關知識點 數據類型、運算、對象、function、繼承、閉包、作用域、原型鏈、事件、RegExp、JSON、Aj...
    sandisen閱讀 11,485評論 7 175

友情鏈接更多精彩內容