这在javascript中是什么:“var var1 = var1 || []”

时间:2010-11-26 00:37:13

标签: javascript

我只是想增加我的核心JavaScript知识。

有时候我会看到这个陈述,但我不知道它的作用:

var var1 = var1 || [];

它意味着什么和/或它是什么,以及如何使用它?

谢谢。

8 个答案:

答案 0 :(得分:11)

基本上,它会查看变量var1是否已经存在并且是“真实的”。如果是,则为其分配本地var1变量的值;如果没有,它会被分配一个空数组。

这是有效的,因为JavaScript ||运算符返回第一个真值操作数的值,如果没有真值则返回最后一个真值。 var1 || var2如果真实,则返回var1,否则返回var2

以下是一些例子:

var somevar;
somevar = 5 || 2; // 5
somevar = 0 || 2; // 2
somevar = 0 || null; // null

非“真实”的值:false0undefinednull""(空字符串)和{{1 }}。与其他语言不同,空数组和对象在JavaScript中被认为是真实的。

答案 1 :(得分:7)

如果它的布尔表示为假(例如它尚未初始化),它会将一个空数组赋给var1

答案 2 :(得分:5)

基本上,如果var1NULLfalse,则var1将设为空array

答案 3 :(得分:4)

JavaScript中的逻辑运算符实际上是评估两个对象之一。当您使用a || b时,如果b为false,则评估为a;如果a为真,则评估为a。因此a || []如果a是任何真值,则a将为[],如果a为任何虚假值,则if (!a) { a = [] };将为{{1}}。

使用{{1}}

更为明显

答案 4 :(得分:3)

Javascript或(||)与其他语言的工作方式略有不同,它返回第一个“truthy”值而不是布尔值。在这种情况下,可以使用“将var1的值设置为var1”,但如果该值为“falsey”,则将其设置为[]“。

这通常用于为可能已设置或可能未设置的变量设置“默认”值,例如函数的参数。

答案 5 :(得分:1)

||运算符计算其第一个“truthy”操作数。

[]是一个空数组。 ([ "Hi!" ]是一个包含一个字符串的数组)

因此,如果表达式x || []是“真实的”,则表达式x计算为var1,如果不是,则表达式为空数组。

这允许{{1}}参数是可选的。

答案 6 :(得分:1)

该语句为var1指定一个空数组。


更长的答案和解释:

这是因为当时没有初始化var1。未初始化是一个虚假值。

接受这个声明:

var1 = var1 || [];

如果var1未初始化,则它变为空数组,如果是空数组,则如果var1为falsenull或{{3},则无法将其分配给空数组它变成一个空数组,如果var1是任何其他值,则没有任何反应,因为它被分配给它自己。 (感谢pst的链接)。

简而言之,它是一个既不可读也不实用的愚蠢陈述,但你很想知道它意味着什么。 :)

答案 7 :(得分:1)

虽然有人指出这是一个“愚蠢的陈述”,但我提出以下两个指标:

(只是为了让人们保持警惕并强化JavaScript的一些“更精细的细节”。)

1)

var变量已经是local。 E.g。

function x (y) {
  var y = y || 42 // redeclaration warning in FF, however it's "valid"
  return y
}
x(true) // true
x()     // 42

2)

var是功能范围的注释(它被“提升”到顶部)而不是使用时的声明。

function x () {
  y = true
  var y = y || 42
}
x()      // true

我不喜欢上述任何一种代码,但是......

由于提升和允许重新声明,帖子中的代码具有以下语义:

var var1
if (!var1) {
  var1 = []
}

编辑我不知道Ed.5中的“严格模式”如何影响上述内容。