在javascript中,如果我们有一些代码,例如
var a = "one";
var b = q || a;
alert (b);
逻辑OR运算符将为b分配值,警报将为“1”。
这仅限于作业,还是我们可以在任何地方使用它?
似乎空字符串的处理方式与undefined相同。这是对的吗?
这如何与AND变量一起使用?它们的组合怎么样?
什么时候使用这些成语,或何时不使用?
是一个很好的例子答案 0 :(得分:24)
要让q || a
评估为a
,q
应为“虚假”值。你所做的就是所谓的“短路评估”。
回答你的问题:
答案 1 :(得分:7)
||
在Javascript中的工作方式是:
true
,则返回左操作数&安培;&安培;效果相似。
您可以将其用于内联存在检查,例如:
var foo = (obj && obj.property)
如果foo
已定义,则会将obj.property
设置为obj
并且" truthy"。
答案 2 :(得分:1)
此行为与其他脚本语言(如Perl)共享。逻辑OR运算符可以用作指定默认值的语法简写,因为逻辑OR运算符在遇到第一个计算结果为true的表达式时会停止计算其操作数:“计算第一个操作数,如果值被解释如果不是假,则分配它。否则重复第二个操作数。“
我发现我经常使用此行为来指定函数参数的默认值。 E.g。
function myFunction(foo, bar) {
var fooValue = foo || "a";
// no need to test fooValue -- it's guaranteed to be defined at this point
}
答案 3 :(得分:1)
我不太确定我是否按照您的提问。您可以在任何可以使用表达式的表达式中使用表达式,并且两个表达式上的逻辑运算符将生成表达式。
alert(q||a);
alert(true||false);
var x=5;
var y=0;
if (y!=0 && x/y>2) { /*do something*/ }
最后一点很有用。像大多数语言一样,Javascript'短路' AND和OR。如果AND的第一部分为假,则它不会评估第二位 - 为您节省0分频。如果OR的第一部分为真,则它不会评估第二部分。
但是你可以在任何可以使用表达式的地方使用布尔运算符。
答案 4 :(得分:1)
Javascript通过truethness / falseness评估逻辑。诸如(false
,“”,null,undefined
,0
, - 0)之类的值被评估为逻辑假。
将此与懒惰评估相结合,现在,left to right
评估'或'操作,并在找到true
后停止。因为,在你的例子中,真实性不是字面意义上的布尔值,所以返回值。
在这种情况下:
x = 0; y = 5; alert(y || x)/*returns 5*/; alert(x || y)/*also returns 5*/;
这也可以是其他对象。
functionThatReturnsTrue() || functionThatDoesSomething();
答案 5 :(得分:0)
恕我直言 - 不要用于布尔类型赋值。这可能令人困惑。 as undefined!== false,即false本身就是一个值。
E.g。如果您想要从对象复制字段值,当且仅当该字段已定义时
var bar.value = false;
var foo = true;
var foo = bar.value || foo; // ==> should be false as bar.value is defined
对于布尔类型赋值,你应该使用
var foo = (bar.value !== undefined) ? bar.value : foo;