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

Javascript var x=x | |{}是什么;,javascript,Javascript,以下代码在java脚本中做什么: var x = x || {}; 如果x未定义(或null,或任何其他false值),它将成为一个空对象。将x分配给一个新的空对象,如果它是null(未定义,false),或者保留它的现有值,如果不是null值的真实性的布尔值,有时非常方便。您的长版本不正确:考虑X之前已定义的情况,并将其设置为 null 。代码>变量x=x | |{}会将x重新定义为一个对象,而var x=(typeof x!='undefined')?x:{}将不显示。但是前面的一段是正确

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

var x = x || {};

如果
x
未定义(或null,或任何其他
false
值),它将成为一个空对象。

x
分配给一个新的空对象,如果它是
null
(未定义,false),或者保留它的现有值,如果不是
null
<124;
则是逻辑的

表情

var x = x OR {};
应该会变得更加明显

如果
x
有一个falsy值(比如
null
undefined
0
),我们将
x
分配给一个空对象
{}
,否则只保留当前值。这个长版本看起来像

var x = x ? x : {};

除非x被定义或赋值,否则它将以空对象作为默认值

就是

for example
x = 10
var x = x || {};
输出必须是

10
如果未指定x值。输出值必须是

undefined

如果定义了var x,则它将是定义的值。否则它将是空对象,如
[object object]

例如,在以下代码块中,x将是
10

var x = 10;
x = x || {}
但是,如果:

var x = x || {};
然后
x
将成为
[object object]
一个人不应该写“var x=x | |{};”本身

这与“var x={};”不同的唯一情况是,x以前在同一范围内初始化。这是不道德的。注:

function() {
  x = {foo:"bar"};
  var x = x || {};
}
与之相同,只是比

function() {
  var x = {foo:"bar"};
  x = x || {};
}
在这两种情况下,在全局范围内都没有对符号“x”的值的引用

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

function( foo ) { 
  foo.x = foo.x || {};
  foo.x.y = "something";
}

回答得很好。我是一个c程序员,这没有任何意义。如果这对你没有任何意义,那么你可能也会注意
!!值返回表示“代码>值的真实性的布尔值,有时非常方便。您的长版本不正确:考虑X之前已定义的情况,并将其设置为<代码> null 。代码>变量x=x | |{}
会将x重新定义为一个对象,而
var x=(typeof x!='undefined')?x:{}将不显示。但是前面的一段是正确的。@Tim:true,我忘记了null==='object'
类型。这个问题是旧的,另一个是重复的。JavaScript中的逻辑表达式从左到右求值,并使用以下规则测试可能的“短路”求值:false&(任何)短路评估为假。true | |(任何)短路评估为true。在上面的示例中,如果x为真,则x将成为指定的值。如果x为false或未定义,则第二个操作数将成为赋值{}。