在javascript中设置默认值

时间:2013-02-21 16:33:26

标签: javascript

以下方式设置默认值与哪一种方法是否正确有什么区别?

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'

3 个答案:

答案 0 :(得分:1)

第二个是四个中正确的。它将按预期工作(如果未设置变量,则使用默认值)。

  1. 如果var1为假(0falsenull''以及undefined,这也将使用默认值)
  2. 如果var1不等同于字符串'undefined'
  3. ,则会使用默认值
  4. 如果var1不等于字符串'undefined',则会使用默认值。

答案 1 :(得分:1)

第一部和第二部作品,但针对不同的条件。

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

如果当前值的计算结果为false,则第一种方法使用默认值。这适用于大多数值,但是如果您使用true作为布尔值的默认值,则无法将其设置为false并且在测试中保持不变:

var var1 = false;

var1 = var1 || true;

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

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

答案 2 :(得分:1)

这些都做了很多不同的事情:

  1. var1 = var1 || 'default_value'

    如果var1falsey 'default_value'var1NaNfalse,则

    0将等于'' },undefined)。这意味着如果var1是这些值中的任何一个(可能最值得注意的是false0''),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'

  5. 最后两个可能是错误的。您很少想检查变量的值是否为字符串'undefined'。您可能需要直接与undefined核对。

    要完全理解其中的每一个,您应该阅读严格相等(===)运算符和相等运算符(==)之间的差异。 MDN's comparison operators article is quite good at explaining this