通常,逻辑或运算符用于此:
var theTitle = config.title || 'Untitled';
基本上,右手操作数是一个表达式,它将像所有表达式一样解析为一个确定的值。它是从左到右处理的,因此如果config.title
未定义,则字符串'Untitled'
将是结果值。如果需要,
您也可以链接逻辑运算符:
var someVar = obj.val || anotherObject.val || yetAnother.foo || 'bar';
或者,如果所有操作数都是对象,并且您不知道存在哪一个:
var foo = (bar || foobar || {property: 'default: none of the objects exist').property;
对象引用被组合在一起,因此 JS 将首先尝试将变量(从左到右)解析为现有值,或者最后创建一个具有所需属性的新对象字面量。访问该引用(分组逻辑或的结果),并将属性.property
分配给 foo... 我希望这至少有点清楚,如果不是:对不起。
注意
,某些属性可能未在实例级别设置,或者可能已设置,但分配了一个虚假值。在这种情况下,逻辑 OR 是不够的,您必须使用三元或正则if...else
:
var foo = (obj.hasOwnProperty('val') ? obj.val : 'default');//<-- uses val property, even if it's undefined, as long as it's set on the instance
//or:
var foo = 'default';
if ('val' in obj)
{//val is set, either on the instance or on its prototype-chain
foo = obj.val
}
//as ternary:
var foo = ('val' in obj ? obj.val : 'default');