Array.from([1, , 2, , 3], (n) => n || 0)
複製代碼
最後生成了[1, 0, 2, 0, 3],why?爲何是[1, 0, 2, 0, 3],難道不該該是 [true,false,true,false,true]嗎?spa
我接觸過不少其餘語言,因此在看到這段代碼的返回值是這個,我很不能理解,邏輯運算符不該該返回的是true和false嗎,帶着疑問,我作了一些實驗code
a = 0 || 1
// 1
a = undefined || 'sd'
// 'sd'
a = null || undefined
// undefined
a = 1 || 0
// 1
a = 1 || 2
//1
a = {} || 3
//{}
a = 'fsa' || null
// 'fsa'
複製代碼
因而可知,當執行|| 運算時 當第一個表達式爲false時就會返回第二個表達式的值,當第一個表達式爲true就會返回第一個表達式的值。結合邏輯運算||的運算規則,當第一個爲true,就返回true,不會去看第二個,當第一個爲false時,纔會去看第二個,class
a = 1 && 0
// 0
a = {} && null
// null
a = 'fsa' && undefined
// undefined
a = 0 && {}
// 0
a = null && 'dsa'
// null
a = undefined && 1
// undefined
複製代碼
因而可知,當執行&& 運算時 當第一個表達式爲true時就會返回第二個表達式的值,當第一個表達式爲false就會返回第一個表達式的值。結合邏輯運算&&的運算規則,當第一個爲true,就去看第二個是否爲true,而後再決定爲true or false,當第一個爲false時,不會去看第二個,直接返回false總結
綜上所訴,咱們能夠得出js進行邏輯運算時,會返回邏輯運算最後運算那個表達式的值,因此Array.from([1, , 2, , 3], (n) => n || 0) 當n爲空時,會返回0。語言