为什么`x&&返回`无效?

时间:2011-12-06 00:58:27

标签: javascript

我知道你可以这样做:

function first(a){
    a && console.log("true");
}

与:

相同
function first(a){
    if(a){
        console.log("true");
    }
}

然而,当我尝试这个时:

function first(a){
    a && return false
}

它不起作用,它给我一个错误。为什么它会给我一个错误?

4 个答案:

答案 0 :(得分:10)

return只能在声明中使用。

a && return false中,它将成为表达式的一部分,这在语法上是错误的。

答案 1 :(得分:6)

如果你真的想这样做,你可以做类似

的事情
return a && false || undefined

或者为了missno的缘故,

return ( a && false ) || undefined

由于&&优先于||,因此会首先对其进行评估 - 但是parens很酷,并且一直都是派对。

另外,请查看规范:http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf - 第68页向您展示表达式运算符(如new)与return等语句的区别(第93页)

答案 2 :(得分:0)

你可以把回报放在行的开头来获得你想要的效果:

return a && console.log("true");

returnstatement的一部分,不能放在需要表达式的位置(如逻辑运算符的操作数)。

答案 3 :(得分:0)

第一个只能起作用,因为&&是一个短路逻辑AND,这意味着只有当两个表达式都为真时才是真的

因此,如果A的计算结果为true(即A不为null,未定义或为空字符串),则还必须检查console.log(“true”)是否为true,从而调用方法

如果A为假,则表达式为false,因此无需调用方法(短路)

为了更清楚,如果你这样做

A & console.log("test") 
无论A的值是什么

,都会记录

测试

第二个不起作用,因为它是一个自己的声明......它与尝试相同

if(A && return false) {
    //doesn't work
}

正确的方法是

return A || B;

如果A评估为假,则返回B