使用 && 进行单线短路评估 ||在 JavaScript 中
Posted
技术标签:
【中文标题】使用 && 进行单线短路评估 ||在 JavaScript 中【英文标题】:One-line short-circuit evaluation with && || in JavaScript 【发布时间】:2015-08-27 13:00:03 【问题描述】:var prefix = options && options.prefix || '';
在我的情况下,在 JavaScipt 中。有人能解释一下这是什么陈述或条件吗?或者最后 prefix 变量的值是多少?
我知道(三元运算符):
condition ? expr1 : expr2
但这不一样。
【问题讨论】:
你不明白怎么办?&&
是 AND
,||
是 OR
。 options
是什么?
【参考方案1】:
这一行就相当于说:
var prefix;
if(options && options.prefix)
prefix = options.prefix;
else
prefix = '';
【讨论】:
他们把这种技术叫做什么?我知道单行条件,例如: a==b?'1':'2';但是第一次看到这么短。 @PooyaSanooei - 您评论中的示例是ternary operator。 @PooyaSanooei 它们是不同的,当options.prefix
是null
或undefined
时,这两个语句返回不同的值。
三元运算符与此相比有些不同。这里 ||像这样工作:
它叫做Short-circuit Evaluation。 javascript 的 ||运算符将返回第一个非假值,而不是标准化布尔值。这是shorten technique used in javascript。【参考方案2】:
该语句将变量“prefix”设置为“options.prefix”的值或空字符串,这样如果“options”不存在,它不会抛出错误。
【讨论】:
【参考方案3】:这意味着,options
是一个对象,使用options.prefix
。如果options.prefix
是undefined
或null
或其他假值,则返回空字符串。
几乎与options ? options.prefix : ''
含义相同。
【讨论】:
【参考方案4】:这工作的原因是在 Javascript 逻辑运算符中计算最后一个操作数的值。
如果存在选项对象,则表达式的 && 部分将被评估为 options.prefix。
如果没有设置,|| 的左边部分表达式将为假,右侧部分 = '' 字符串 - 将被返回。
【讨论】:
【参考方案5】:类似如下:
var prefix;
if(options) // or for better understanding, its if(options != undefined)
prefix = options.prefix;
else
prefix = '';
尝试以下小提琴以更好地理解:
http://jsfiddle.net/n41tfnh4/1/
【讨论】:
这实际上比接受的答案更正确,因为如果options.prefix
被替换为函数调用,接受的答案会调用它两次,这是不正确的。这个版本只会调用一次,这是正确的行为【参考方案6】:
翻译成人类语言
如果变量options
定义了一些非假值
它还有一个属性options.prefix
,其值也是非假的
然后用这个options.prefix
值设置变量prefix
。
否则,我们的prefix
默认设置为空字符串。
PS.通过google“javascript falsy values”快速查看JavaScript中falsey values的完整列表
更快的解释
这是options.prefix
的快速值检查(和获取),默认情况下为空字符串。
(options
未定义时不抛出异常)
【讨论】:
这个技术和ternary operators不一样?看起来我们使用 ||而不是: 为了得到等价的结果,你也可以使用三元运算符:var prefix = options ? (options.prefix || '') : ''
【参考方案7】:
如果prefix
在options
上可用,请将其设置为var prefix
。否则,将其设置为空字符串。
【讨论】:
以上是关于使用 && 进行单线短路评估 ||在 JavaScript 中的主要内容,如果未能解决你的问题,请参考以下文章