JS逻辑运算 你真的看得明白吗

684 阅读2分钟

JS 的 || && 运算

Array.from([1, , 2, , 3], (n) => n || 0)

最后生成了[1, 0, 2, 0, 3],why?为什么是[1, 0, 2, 0, 3],难道不应该是 [true,false,true,false,true]吗?

如果真的明白的人可以不用再往下看了

我接触过很多其他语言,所以在看到这段代码的返回值是这个,我很不能理解,逻辑运算符不应该返回的是true和false吗,带着疑问,我做了一些实验

||运算

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时,才会去看第二个,

再来看&&运算

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。