JavaScript结合&&变量中的语句为true或false

时间:2012-07-18 16:01:45

标签: javascript variables

只是一个简单的问题。我找不到与此相关的任何内容,因为我真的没有看到如何解释它...但是,如果我使用&&和两者组合两个bool值。要做出另一个变量,会发生什么?

var is_enabled = isEnabled() && isSupported();

如果isEnabled()为false且isSupported()为true,它是否等于false?

12 个答案:

答案 0 :(得分:21)

在Javascript中,&&||运算符略显奇怪。这取决于值是否为“falsy”(零,undefinednull,空字符串,NaN)或truthy(其他任何内容,包括空数组)。

如果第一个值是“falsy”,则使用&&,然后操作的结果将是第一个值,否则它将是第二个值。使用||如果第一个值是“falsy”,那么操作的结果将是第二个值,否则它将是第一个值。

示例:

var a = 5 && 3; // a will be 3
var a = 0 && 7; // a will be 0

var a = 1 || 2; // a will be 1
var a = 0 || 2; // a will be 2

如果您想要替换它,这非常有用:

if (x == null){
  x = 5;
}

使用:

x = x || 5;

简而言之,如果isEnabled()是真实的,那么is_enabled将被设置为isSupported()返回的任何内容。如果isEnabled()是假的,则is_enabled将设置为该值的值。

正如罗伯特指出的,还有短路:

var x = 5 || infinite_loop();
var x = false && infinite_loop();

在这两种情况下,infinite_loop()调用都不会发生,因为这两个操作都是短路的 - ||在第一个值为真时没有评估第二个值,而&&当第一个值为falsy时,1}}不会计算第二个值。

答案 1 :(得分:3)

false && true的结果是false

答案 2 :(得分:2)

如果isEnabled()为false,则使用&&那么isSupported()永远不会被调用,因为评估会短路。

答案 3 :(得分:1)

如果&&运算符的任何操作数是 falsy false,0,nullundefinedNaN,{ {1}})然后""将被分配第一个假值。

如果is_enabled运算符的所有操作数都不是 falsy ,则最后一个操作数将分配给&&

答案 4 :(得分:1)

如果isEnabled和isSupported都为true,则

is_enabled将仅设置为true。因此,如果isEnabled为false,并且isSupported为true,则is_enabled将为false。

答案 5 :(得分:1)

是:

<script type="text/javascript">
function isEnabled() {
    return false;
}

function isSupported() {
    return true;
}

var is_enabled = isEnabled() && isSupported();

alert(is_enabled);  // = 'false'
</script>

答案 6 :(得分:1)

如果两个函数只返回true或false,那么它只是作为普通函数和&amp;&amp;与布尔人。

1 && 1 = 1
1 && 0 = 0
0 && 1 = 0
0 && 0 = 0

答案 7 :(得分:1)

首先,&amp;&amp;当且仅当两个表达式都为真时才有效。

回到你的问题,真实&amp;&amp; false将等于false,所以是的。

您也可以尝试使用firebug或chrome开发人员工具上的控制台功能自行测试这些表达式。

答案 8 :(得分:0)

你可以做的只是添加一个&并对这些布尔值应用AND操作,如果两者都为真,那么is_enabled将为真。

var is_enabled = isEnabled() & isSupported();

修改 感谢Pointy指出我的语法不正确,这应该适用于C语言,猜猜我只是感到困惑

答案 9 :(得分:0)

在这里您可以看到可能的测试案例:

var str='My dummy string';
var str2='My other dummy string';
var falsy1= 1==2;
var truthy1= true;
var truthy2= true;
var falsy2= false;

然后:

console.log('Both bool true:', truthy1 && truthy2); // <== Both bool true: true
console.log('Bool true and string:', truthy1 && str); // <== Bool true and string: My dummy string
console.log('String and bool true:', str && truthy1); // <== String and bool true: true
console.log('Falsy operation and string:', falsy1 && str); // <== Falsy operation and string: false
console.log('Bool false and string:', falsy2 && str); // <== Bool false and string: false
console.log('Both bool false and true:', falsy1 && truthy1); // <== Both bool false and true: false
console.log('Both bool true and false:', truthy1 && falsy1); // <== Both bool true and false: false
console.log('Operation false and bool true:', falsy2 && truthy1); // <== Operation false and bool true: false
console.log('Operation false and bool false:', falsy2 && falsy1); // <== Operation false and bool false: false
console.log('Both strings:', str2 && str); // <== Both strings: My dummy string
console.log('Both strings:', str && str2); // <== Both strings: My other dummy string   
console.log('String and bool false:',  str && falsy1); // <== String and bool false: false  
console.log('String and 2 bool false and true:',  str && falsy1  && truthy1); // <== String and 2 bool false and true: false
console.log('3 bool false and true and true:',  falsy1 && truthy1 && truthy2); // <== 3 bool false and true and true: false
console.log('3 bool false and false and true:',  falsy1 && falsy1 && truthy1); // <== 3 bool false and false and true: false
console.log('Bool false and operation false and bool true:',  falsy1 && falsy2 && truthy1); // <== Bool false and operation false and bool true: false
console.log('3 bool true and true and false:',  truthy2 && truthy1 && falsy1); // <== 3 bool true and true and false: false
console.log('String and 2 bool false and true:',  str && falsy1 && truthy1); // <== String and 2 bool false and true: false
console.log('String and 2 bool true and false:',  str && truthy1 && falsy1); // <== String and 2 bool true and false: false
console.log('2 bool false and true and string:',   falsy1 && truthy1 && str); // <== 2 bool false and true and string: false
console.log('2 bool true and false string:',  truthy1 && falsy1 && str); // <== 2 bool true and false string: false
console.log('Bool true and string and bool false:',  truthy1 && str && falsy1); // <== Bool true and string and bool false: false
console.log('Bool false and string and bool true:',  falsy1 && str && truthy1); // <== Bool false and string and bool true: false

奖金:

console.log('The existence of a string:',  !!str); // <== The existence of a string: true

答案 10 :(得分:0)

简短答案: 如果第一不虚假,那么第二, 首先。

示例::如果isEnabled()返回false,则结果为false

否则,如果isEnabled()为true, 那么 isSupported()返回的一切就是结果。

现在使用falsetrue来简化答案,false可以是任何 fassy 值。

  

真实值和虚假值的示例:

     

var string =“”; // <-虚伪

     

var filledString =“这里有一些字符串”; // <-真

     

var zero = 0; // <-虚伪

     

var numberGreaterThanZero // //-真

     

var emptyArray = []; // <-说实话,我们接下来将进一步探讨

     

var emptyObject = {}; // <-真

答案 11 :(得分:-3)

布尔运算成功的结果,例如“&amp;&amp;”是一个布尔值。因此,isEnabled() && isSupported()的结果将是一个布尔值,然后将其分配给is_enabled