【问题标题】:What does this JS code mean? [duplicate]这个 JS 代码是什么意思? [复制]
【发布时间】:2012-02-06 19:43:03
【问题描述】:

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

我偶然发现了这条线,但似乎无法弄清楚它的含义

var G = G || {};

有什么想法吗?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    G = G,如果G不存在,则创建为空对象。

    【讨论】:

      【解决方案2】:

      如果 G 未定义,则 G 是 G 或新对象 "falsy".

      【讨论】:

      • 哦,我明白了!所以如果我已经在脚本的其他部分声明了 G,G 不会被覆盖?
      • 对。此外,正如@am-not-i-am 所建议的,它不仅仅是“未声明”,而是“未定义”、“假”等。
      【解决方案3】:

      如果G 当前是任何“假”值,那么对象字面量将被分配给G

      “虚假”值是...

      • undefined
      • null
      • ''
      • NaN
      • false
      • 0

      使用的运算符是逻辑或运算符。

      它的工作方式是先计算左操作数。如果该操作数有一个“真实”值(任何非假值),它会返回它,并且不评估第二个操作数(短路)

      如果左操作数为“假”,则返回右操作数,而不管其值。


      G 为假的示例...

      //      v--- Evaluate G. The value of G is the "falsey" value undefined...
      var G = G || {};
      //            ^--- ...so evaluate and return the right hand operand.
      

      G 真实的示例...

      G = 123;
      
      //      v--- Evaluate G. The value of G is a "truthy" value 123...
      var G = G || {};
      //      ^--- ...so return 123, and do not evaluate the right hand operand.
      

      【讨论】:

      • 这是我的猜测,但对我来说毫无意义,因为“var”部分。我的意思是,G 变量是在同一行中定义的,给它 G||{} 的值有什么意义?不是和 var G = {}; 一样吗? ?
      • @Loupax:是的,你是对的,如果G 不可能已经被初始化,那么|| 没有多大意义。有时人们会不必要地重新声明变量,或者声明已经声明为参数的变量,所以也许这就是这里发生的情况。
      • ...注意undefined 是声明变量的默认值。
      • 没有未定义 || {} == 错误?空对象评估为真?那是我不知道的事情......
      • @Loupax:不,它将操作数评估为“真”或“假”,但它总是返回操作数本身。所以假设第一个操作数是{foo:'bar'},它评估它的“真实性”,确定它确实是“真实性”,所以它返回对象。因此,虽然它考虑其真实性,但它绝不会将操作数强制为布尔值。
      猜你喜欢
      • 2011-08-26
      • 2023-03-19
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 2014-01-05
      • 1970-01-01
      • 2021-08-12
      • 2012-02-11
      相关资源
      最近更新 更多