-2

通过以下方式设置默认值与哪种方式正确之间有什么区别?

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'
4

3 回答 3

1

第二个是四个中正确的一个。它将按您的意愿工作(如果未设置变量,请使用默认值)。

  1. 如果var1为 false ( 0, false, null, '', 以及undefined) ,这也将使用默认值
  2. var1如果不等于字符串,这将使用默认值'undefined'
  3. var1如果不等于字符串,这将使用默认值'undefined'
于 2013-02-21T16:37:34.813 回答
1

第一个和第二个有效,但适用于不同的条件。

第三个和第四个将值与"undefined"根本无法确定它是否为未定义值的字符串进行比较。

如果当前值评估为 false,则第一种方法使用默认值。这适用于大多数值,但如果您例如将其true用作布尔值的默认值,则无法将其设置为false并使其在测试中存活:

var var1 = false;

var1 = var1 || true;

现在它true已经有了价值。对于其他一些特定值,您将遇到同样的问题,例如0or ""

第二个是与不同数据类型最一致的。然而,第一个经常使用,因为它更短。

于 2013-02-21T16:39:49.120 回答
1

这些都做了非常不同的事情:

  1. var1 = var1 || 'default_value'

    var1'default_value'如果var1的( NaN, false, 0, '', )将等于undefined。这意味着 if var1is 任何这些值(也许最值得注意的是false,0''var1将等于default_value

  2. var1 = typeof(var1) !== 'undefined' ? var1 : 'default_value'

    var1'default_value'如果var1' 的类型严格等于 ,则将等于'undefined'

  3. var1 = var1 !== 'undefined' ? var1 : 'default_value'

    var1'default_value'仅当var1不严格等于字符串时才会等于'undefined'

  4. var1 = var1 != 'undefined' ? var1 : 'default_value'

    var1'default_value'仅当var1不等于字符串时才会等于'undefined'

最后两个可能是错误的。您很少想检查变量的值是否是字符串'undefined'。您可能打算undefined直接检查。

要完全理解其中的每一个,您应该阅读严格相等 ( ===) 运算符和相等运算符 ( ==) 之间的区别。MDN 的比较运算符文章很好地解释了这一点

于 2013-02-21T16:43:11.747 回答