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
