【问题标题】:What does this Javascript code mean? [duplicate]这段 Javascript 代码是什么意思? [复制]
【发布时间】:2011-02-28 00:51:44
【问题描述】:

可能重复:
What does “options = options || {}” mean in Javascript?

查看 YouTube 源...

var yt = yt || {};

这是否意味着.. 如果yt 存在,则将yt 设置为yt,否则创建一个新对象?

如果是这样的话,我不认为你可以在声明变量时加上条件。

【问题讨论】:

标签: javascript


【解决方案1】:

yt 的值分配回yt,除非它是0NaNfalsenull""undefined 中的任何一个(即它是 falsy),在这种情况下将{} 分配给yt

之所以有效,是因为上面列表中的每个值都在布尔表达式中计算为 false

【讨论】:

  • 你忘记了空字符串:Boolean('') === false
【解决方案2】:

确切的意思是:如果内容不评估为假,则将其分配给自身(这是一个中性操作),否则创建一个新对象并将其分配给yt。它通常用于实例化对象以用作命名空间,首先检查命名空间是否已经存在。

【讨论】:

  • 不完全是。考虑:var yt = NaN; yt = yt || {}; 在这种情况下yt 存在,但最终结果将是{}
  • @lwburk :是的,但它不是一个对象。
  • 这与它无关。空字符串是一个对象,将产生相同的结果。
  • Hrm,也许我应该修改一下。确实,"" instanceof Object 的计算结果为 false。我仍然认为你的措辞不正确。如果yt 是空字符串或0(或其他),那么显然它存在
【解决方案3】:

评估yt,如果评估为假,则将其实例化为对象。

我第一次看到这样的东西是:

function handleEvent(e){
    e=e||window.event;
}

非常漂亮~有人知道支持这种语法的其他语言吗? (不是 PHP =(

【讨论】:

  • 为什么yt 会是假的?它看起来不像布尔变量。或者你的意思是假的,因为对象还不存在?
  • @marko false==undefined==null==0 在javascript条件中
  • yt 是否为假不是问题,而是它是否假。除了 false 之外,还有几件事是 falsy,包括(正如 Marko 所暗示的)undefined
  • 谢谢@Matthew,我之前没听说过falsy
【解决方案4】:

是的,在赋值之前首先计算表达式的整个右侧。所以如果yt==false,RHS 上的表达式的值将是{} 并被传递给var yt

【讨论】:

  • 不,不是是否等于false,而是是否为false。
猜你喜欢
  • 2012-03-14
  • 2014-01-05
  • 2011-08-26
  • 2014-01-10
  • 2018-07-07
  • 1970-01-01
  • 2016-03-28
相关资源
最近更新 更多