通过以下方式设置默认值与哪种方式正确之间有什么区别?
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已经有了价值。对于其他一些特定值,您将遇到同样的问题,例如0or ""。
第二个是与不同数据类型最一致的。然而,第一个经常使用,因为它更短。
这些都做了非常不同的事情:
var1 = var1 || 'default_value'
var1'default_value'如果var1是假的( NaN, false, 0, '', )将等于undefined。这意味着 if var1is 任何这些值(也许最值得注意的是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 的比较运算符文章很好地解释了这一点。