使用 && || 的单线短路评估在 JavaScript

One-line short-circuit evaluation with && || in JavaScript

var prefix = options && options.prefix || '';

我的例子是 JavaScipt。有人可以解释一下这是什么陈述或条件吗?或者最后 prefix 变量的值是多少?

我知道(三元运算符):

condition ? expr1 : expr2

但这次不同。

这一行相当于说:

var prefix;
if(options && options.prefix){
  prefix = options.prefix;
} else{
  prefix = '';
}

该语句将变量 "prefix" 设置为 "options.prefix" 的值或空字符串,如果 "options" 不存在,则它不存在抛出错误。

表示options是一个对象,使用options.prefix。如果 options.prefixundefinednull 或其他虚假值,return 空字符串。

接近 options ? options.prefix : ''.

的意思

这样做的原因是 Javascript 逻辑运算符计算最后一个操作数的值。

如果选项对象存在,表达式的 && 部分将被计算为 options.prefix。

如果没有设置,||的左边部分expression 将为 false,右侧部分 = '' string - 将被返回。

类似于以下内容:

var prefix;
if(options){     // or for better understanding, its if(options != undefined)
    prefix = options.prefix;
}
else
    prefix = '';

尝试以下 fiddle 以获得更好的理解: http://jsfiddle.net/n41tfnh4/1/

翻译成人类语言

如果变量 options 定义了一些非假值

并且它还有一个属性 options.prefix 其值也是非假的

然后用这个 options.prefix 值设置变量 prefix

否则,我们的prefix默认设置为空字符串


PS. 快速查看 JavaScript 中 错误值 的完整列表 google "javascript 虚假值"


更快的解释

这是 options.prefix 的快速值检查(和获取),默认为空字符串。

(当 options 未定义时不抛出异常)

如果 prefixoptions 可用,请将其设置为 var prefix。否则,将其设置为空字符串。