什么是var x = x || {};

jak*_*koh 32 javascript

以下代码在java脚本中做了什么:

var x = x || {};
Run Code Online (Sandbox Code Playgroud)

jAn*_*ndy 42

||是合乎逻辑的OR.

表达方式

var x = x OR {};
Run Code Online (Sandbox Code Playgroud)

应该变得更加明显.

如果x有一个falsy值(如null,undefined,0,""),我们分配x一个空的对象{},否则只要保持当前值.这个版本很长

var x = x ? x : {};
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案。我是一个交流程序员,这没有任何意义。 (2认同)
  • 如果这对你没有任何意义,那么你也可以注意`!! value`,它返回一个表示`value`真实性的布尔值,有时非常方便. (2认同)

Gab*_*abe 7

如果x未定义(或null或任何其他false值),则它将变为空对象.


Dzh*_*ghn 5

永远不应该写“var x = x || {};” 本身。

唯一与“var x = {};”不同的情况 是 x 先前在同一范围内初始化的时间。这是不道德的。笔记:

function() {
  x = {foo:"bar"};
  var x = x || {};
}
Run Code Online (Sandbox Code Playgroud)

与相同,只是更令人困惑,

function() {
  var x = {foo:"bar"};
  x = x || {};
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,全局范围内都没有对符号“x”的值的任何引用。

这个表达式是合法的惰性属性初始化习惯用法的混淆变体:

function( foo ) { 
  foo.x = foo.x || {};
  foo.x.y = "something";
}
Run Code Online (Sandbox Code Playgroud)