我只是想增加我的核心JavaScript知识。
有时候我会看到这个陈述,但我不知道它的作用:
var var1 = var1 || [];
它意味着什么和/或它是什么,以及如何使用它?
谢谢。
答案 0 :(得分:11)
基本上,它会查看变量var1
是否已经存在并且是“真实的”。如果是,则为其分配本地var1
变量的值;如果没有,它会被分配一个空数组。
这是有效的,因为JavaScript ||
运算符返回第一个真值操作数的值,如果没有真值则返回最后一个真值。 var1 || var2
如果真实,则返回var1
,否则返回var2
。
以下是一些例子:
var somevar;
somevar = 5 || 2; // 5
somevar = 0 || 2; // 2
somevar = 0 || null; // null
非“真实”的值:false
,0
,undefined
,null
,""
(空字符串)和{{1 }}。与其他语言不同,空数组和对象在JavaScript中被认为是真实的。
答案 1 :(得分:7)
如果它的布尔表示为假(例如它尚未初始化),它会将一个空数组赋给var1
。
答案 2 :(得分:5)
基本上,如果var1
为NULL
或false
,则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为false
,null
或{{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中的“严格模式”如何影响上述内容。