首先明確優先級:! > && > ||code
NaN && 1 || 0 // 0
:首先執行NaN && 1,結果是NaN,而後執行NaN || 0,最終結果是0NaN || 1 && 0 // 0
:首先執行1 && 0,結果是0,而後執行NaN || 0,最終結果是01 && NaN && 2 // NaN
:按照從左到右的順序執行,最終結果是NaNfunction test(num) { var newNum = num || 1 console.log(newNum) } test() // 1 test(4) // 4 test(0) // 1
function test(obj) { var num = obj && obj.num && obj.num.count console.log(num) } test() //undefined test({}) //undefined test({num: {}}) // undefined test({num: {count: 1}}) // 1
function test(obj) { var num = obj && obj.num && obj.num.count || 0 console.log(num) } test() //0 test({}) //0 test({num: {}}) // 0 test({num: {count: 1}}) // 1
console.log(undefined||0)
,返回第二個操做數console.log(1||0)
,返回第一個操做數