当前位置:  开发笔记 > 编程语言 > 正文

逻辑运算符&&和javascript中的两个字符串

如何解决《逻辑运算符&&和javascript中的两个字符串》经验,为你挑选了3个好方法。

当我在两个字符串之间使用逻辑运算符&&时,为什么它会给我第二个字符串作为输出:

console.log("" && "Dog");    // ""
console.log("Cat" && "Dog"); // "Dog"

我意识到有例外0,false,null,undefined,""NaN,一切被评估为布尔在像上面的一个逻辑表达式真.但为什么输出是第二个字符串而不是第一个?为什么输出不仅仅是"真实",因为它被评估为布尔表达式?



1> Thank you..:

在表达中

"Cat" && "Dog"
// => "Dog"

因为你正在使用&&,JavaScript承诺你会验证表达式的两面都是true.在这种情况下,"Dog"是最后评估的东西.

更明确一点,你可以做点什么

var c = "Cat" != null && "Dog" != null

它有点罗嗦,但归结为

var c = true && true
console.log(c)
// => true

如果你想要一个布尔的简单快捷方式

var c = Boolean("Cat" && "Dog")
console.log(c)
// => true

如果您只使用简单的REPL或JavaScript控制台,您将能够非常轻松地看到此输出.


根据以下评论之一

使用Boolean,JavaScript承诺至少一方是||.由于"猫"是真的,它停在那里并返回"猫".这称为短路评估



2> José Ernesto..:

@naomik的回答几乎涵盖了它.如果你想深入,我建议你看一下ECMAScript规范,第11.11节:

http://www.ecma-international.org/ecma-262/5.1/#sec-11.11

在"语义学"部分,我们可以看到:

生产LogicalANDExpression:LogicalANDExpression && BitwiseORExpression的计算方法如下:

    lref成为评估LogicalANDExpression的结果.

    lval为GetValue(lref).

    如果ToBoolean(lval)为false,则返回lval.

    rref是评估BitwiseORExpression的结果.

    返回GetValue(rref).


因为我刚刚发现它,并且认为我有一些额外的知识可以分享以前没有分享过;)我不认为问题在SO上有"失效日期":)

3> Matti Mehton..:

我认为这是因为逻辑运算符&&的本质.Javascript "cat" && "Dog"以下列方式执行表达式:

检查值"cat" - 它返回除"",0,null,undefined或false之外的其他内容,并且是真实的.Javascript看到&&,所以它继续表达并面对字符串"Dog",这是"",0,null,undefined或false之外的东西,而且是真实的,表达式结束,表达式返回它检查的最后一个值.

如果你&&||表达式替换,则以第一个truthy值结束

var boolean = "cat" || "dog"

返回第一个值: cat


+1是的,它真的归结为逻辑运算符101,不是吗?:)很好写.
推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有