以下方式设置默认值与哪一种方法是否正确有什么区别?
1) var1 = var1 || 'default_value'
2) var1 = typeof(var1) !== 'undefined' ? var1 : 'default_value'
3) var1 = var1 !== 'undefined' ? var1 : 'default_value'
4) var1 = var1 != 'undefined' ? var1 : 'default_value'
答案 0 :(得分:1)
第二个是四个中最正确的。它将按预期工作(如果未设置变量,则使用默认值)。
var1
为假(0
,false
,null
,''
以及undefined
,这也将使用默认值)var1
不等同于字符串'undefined'
var1
不等于字符串'undefined'
,则会使用默认值。答案 1 :(得分:1)
第一部和第二部作品,但针对不同的条件。
第三个和第四个将值与字符串"undefined"
进行比较,后者根本不确定它是否为未定义的值。
如果当前值的计算结果为false,则第一种方法使用默认值。这适用于大多数值,但是如果您使用true
作为布尔值的默认值,则无法将其设置为false
并且在测试中保持不变:
var var1 = false;
var1 = var1 || true;
现在它已经true
了,尽管它已经有了值。对于其他一些特定值,您会遇到同样的问题,例如0
或""
。
第二个是与不同数据类型最一致的一个。然而,第一个经常被使用,因为它更短。
答案 2 :(得分:1)
这些都做了很多不同的事情:
var1 = var1 || 'default_value'
var1
为falsey 'default_value'
,var1
,NaN
,false
,则 0
将等于''
},undefined
)。这意味着如果var1
是这些值中的任何一个(可能最值得注意的是false
,0
或''
),var1
将等于default_value
。
var1 = typeof(var1) !== 'undefined' ? var1 : 'default_value'
var1
的类型严格等于'default_value'
, var1
将等于'undefined'
。
var1 = var1 !== 'undefined' ? var1 : 'default_value'
var1
不严格等于字符串'default_value'
时, var1
才会等于'undefined'
。
var1 = var1 != 'undefined' ? var1 : 'default_value'
var1
不等于字符串'default_value'
时, var1
才会等于'undefined'
。
最后两个可能是错误的。您很少想检查变量的值是否为字符串'undefined'
。您可能需要直接与undefined
核对。
要完全理解其中的每一个,您应该阅读严格相等(===
)运算符和相等运算符(==
)之间的差异。 MDN's comparison operators article is quite good at explaining this