首先明确优先级:! > && > ||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)
,返回第一个操做数