它在Javascript中的确切含义(分配变量)[重复]

Posted

技术标签:

【中文标题】它在Javascript中的确切含义(分配变量)[重复]【英文标题】:What it exactly means in Javascript (assigning variable) [duplicate] 【发布时间】:2013-05-20 12:39:10 【问题描述】:

我有疑问,因为我不确定,也无法在 Stack Overflow 上找到有关此问题的答案。

这到底是什么意思:

variable = variable || 

或类似的东西:

this.pointX = options.pointX || 6;

我知道它分配给variable 一个variable 如果它存在empty Object 如果变量不存在但为什么它工作?

|| 在这里不是指“或”吗?

【问题讨论】:

这基本上是“空合并”,您可以在此处找到更多信息:***.com/questions/476436/… 和此处:***.com/questions/6439579/… 见***.com/a/6439629/643483 @Cory 就像我说的。我一直在寻找这个答案,但找不到。现在我找到了很多资源来回答我的问题。 @Cory 说句公道话,如果你不知道“null coalescing”这个词,很难搜索“javascript ||” @jerry:非常正确。我认为这些链接会有所帮助。 【参考方案1】:

|| 像 SQL COALESCE 语句一样有效地工作。

var x = y || z;

意思是:

如果y 评估为“真实”值,则将y 分配给x

如果y 的计算结果为“假”值,则将z 分配给x

请参阅http://11heavens.com/falsy-and-truthy-in-javascript 了解有关“真实/虚假”的更多详细信息(或只是google 它)。

【讨论】:

【参考方案2】:

||or 运算符。

这基本上意味着如果variable 未定义,它会将variable 分配给一个新的对象字面量。

https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Expressions_and_Operators#Logical_operators

【讨论】:

variable 被分配给第二个操作数,只要它的真实性值为false,而不仅仅是未定义。例如,var s = ""; s = s || "foo"; 将导致 s 的值为 "foo",即使它已经被定义。【参考方案3】:

|| 在这里的意思是 OR:

var x = 5
var x = x ||  //If v is defined, v = v, else v =  (new, empty, object).
//x = 5 since x already was defined

var y = y || 
//y =  since y was undefined, the second part is run.

【讨论】:

【参考方案4】:

|| 运算符返回确定其“真实性”值的实际对象,而不仅仅是布尔值(truefalse)。它“短路”,因为一旦它可以确定结果,它就会停止。

如果variable 的真实性值为true,则返回它(因为当trueor 时,结果是true)。否则,返回第二个操作数(即使它的真实性值为false),因为它决定了整个表达式的真实性。

【讨论】:

【参考方案5】:
this.pointX = options.pointX || 6;

表示将this.pointX的值分配给options.pointX,如果可用(即不为空),否则分配6的值

【讨论】:

pointX 很可能是 0,这是不真实的。 @DougM 我了解到它也可以是空字符串,NaN,未定义【参考方案6】:

|| JavaScript 中的运算符与您会发现的其他一些语言不同。当 JavaScript 求值时 ||它似乎返回一个操作数或另一个。它不会进行典型的真值表评估,如果任何操作数评估为真,则评估为真,否则为假。

【讨论】:

以上是关于它在Javascript中的确切含义(分配变量)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

IFS=$'\n' 的确切含义是啥?

“私人字节”没有反映出来。如何找到进程分配的确切内存?

JPA @Entity 注解的确切含义是啥?

NHibernate中持久性模型的确切含义是啥?

依赖范围的确切含义是啥,例如构建、测试等

从对象获取属性值并将其分配给javascript中的变量