先看例子:
var fn = function (){
var count = 1
console.log(count);
}
var uniq = function(){
var count =2
console.log(count)
}
fn() || uniq ()
//请问 输出的结果是什么?
答案:1和2
为什么是1和2呢?
官方文档解释(逻辑或):
逻辑或,OR(||)
expr1 || expr2若 expr1 可转换为 true,则返回 expr1;否则,返回 expr2。
参考文档-逻辑运算符 - JavaScript | MDN
分析:
1.函数在被调用的情况下,会输出函数中打印的值,所以在控制台中我们可以看到,fn()输出1,uniq()输出2。
2.在这2个函数的函数体里面,我们并没有发现有return的返回值,
所以函数默认情况下函数的返回值是:undefined。
再来看看,官方文档里能够转换为false的类型吧:
会被转换为 false 的表达式有:
- null;
- NaN;
- 0;
- 空字符串("" or ‘’ or ``);
- undefined。
所以,fn() || uniq() 我们可以理解为
undefined || undefined 变成了 false || false
执行:false || uniq() 因为第一个表达式是false,这里fn()函数输出1,
所以继续执行后面uniq()这个函数,然后输出2。
所以答案就是输出了,1和2。
有return 的情况:
var fn = function (){
var count = 1
console.log(count);
return true;
}
var uniq = function(){
var count =2
console.log(count)
}
fn() || uniq ()
这里答案:只输出了1。因为在fn()里面多了一句return true。