【问题标题】:What does "variable = variable || {}" mean in JavaScript [duplicate]JavaScript中的“变量=变量|| {}”是什么意思[重复]
【发布时间】:2013-03-28 11:24:54
【问题描述】:

这个变量的初始化代表什么:

var variable = variable  ||  {} ;

应该如何以及何时使用它?

【问题讨论】:

  • 感谢您提供该链接。很高兴实际阅读这句话,这在过去曾让我感到困惑:“&& 或 || 运算符产生的值不一定是布尔类型。产生的值将始终是其中一个的值两个操作数表达式。"
  • 如果这是在代码模块的顶部,它用于声明一个“命名空间”对象。请参阅上述问题。
  • @skuntsel 为什么要添加var?它有可能彻底改变问题的语义。
  • @Alnitak 我这样做是为了强调声明期间的初始化,因为我认为这样使用更合适。如果没有声明变量,这样的赋值(没有var)不会产生错误吗?

标签: javascript


【解决方案1】:

该行代码执行以下操作:

IF variable 未定义(或具有错误值)THEN 将其设置为空对象。

ELSE 什么都不做(从技术上讲,variable 被分配给它自己)

换句话说,variable 将被转换为一个空对象,如果它是以下任何一种:

  • 未定义
  • NaN
  • 一个空字符串

请参阅 toBoolean 了解规范对 falsey 值的定义。

【讨论】:

  • “不做任何事情”就结果而言,但在内部它是一个将变量分配给自身的指令(可能由编译器优化但仍然是一个赋值表达式),因此为了性能Closure Compiler 会将其编译为variable||(variable={})。顺便说一句,您在虚假值列表中缺少 NaN
  • 你忘记了NaN。但是,您应该跳过此列表并参考toBoolean。另见ecma-international.org/ecma-262/5.1/#sec-11.11
  • 虽然“分配给自己”在技术上更准确,但我猜“不做任何事情”是有效的(就它没有可见的效果而言)并且更易于理解。好吧,猜想人们可以理解它。 :P
  • @FabrícioMatté “分配给自己”并不总是无操作 - 如果变量是全局变量,则可能有一个 setter (并且是 window 对象的这样一个属性)。
  • @Alnitak 有道理,我完全忘记了二传手。此外,getter 还可以在返回值之前执行一些其他操作。
【解决方案2】:

如果变量未定义或为假,则将其初始化为空对象。

【讨论】:

    【解决方案3】:

    测试variable是否被初始化。如果不是,它将variable 初始化为一个空对象。如果它确实存在,它什么也不做,(技术上将variable 分配给它自己)。

    【讨论】:

      【解决方案4】:

      如果变量已经存在,则使用它,否则创建一个空对象

      【讨论】:

        猜你喜欢
        • 2011-08-30
        • 2020-08-29
        • 1970-01-01
        • 1970-01-01
        • 2013-07-21
        • 1970-01-01
        • 2011-05-22
        • 2012-07-12
        • 2014-10-01
        相关资源
        最近更新 更多