通过以下方式设置默认值与哪种方式正确之间有什么区别?
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'
通过以下方式设置默认值与哪种方式正确之间有什么区别?
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'
第二个是四个中最正确的一个。它将按您的意愿工作(如果未设置变量,请使用默认值)。
var1
为 false ( 0
, false
, null
, ''
, 以及undefined
) ,这也将使用默认值var1
如果不等于字符串,这将使用默认值'undefined'
var1
如果不等于字符串,这将使用默认值'undefined'
。第一个和第二个有效,但适用于不同的条件。
第三个和第四个将值与"undefined"
根本无法确定它是否为未定义值的字符串进行比较。
如果当前值评估为 false,则第一种方法使用默认值。这适用于大多数值,但如果您例如将其true
用作布尔值的默认值,则无法将其设置为false
并使其在测试中存活:
var var1 = false;
var1 = var1 || true;
现在它true
已经有了价值。对于其他一些特定值,您将遇到同样的问题,例如0
or ""
。
第二个是与不同数据类型最一致的。然而,第一个经常使用,因为它更短。
这些都做了非常不同的事情:
var1 = var1 || 'default_value'
var1
'default_value'
如果var1
是假的( NaN
, false
, 0
, ''
, )将等于undefined
。这意味着 if var1
is 任何这些值(也许最值得注意的是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 的比较运算符文章很好地解释了这一点。