2013-02-21 81 views
-2

以下方式设置默认值和哪一个是正确的有什么区别?在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' 
+4

他们都做了非常不同的事情。 – 2013-02-21 16:34:19

回答

1

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

  1. var1 = var1 || 'default_value'

    var1将等于'default_value'如果var1falseyNaNfalse0''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'

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

要全面了解其中每一项,您应该了解严格相等(===)运算符与相等运算符(==)之间的差异。 。

1

第二个是正确的四个。它会按照你的意图工作(如果变量没有设置,使用默认值)。

  1. 这也将使用默认值,如果var1是falsey(0falsenull'',以及undefined
  2. 这将使用默认值,如果var1不等同于字符串'undefined'
  3. 这将使用默认值,如果var1不等于字符串'undefined'
1

第一个和第二个作品,但对于不同的条件。

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

如果当前值计算结果为false,则第一种方法使用默认值。这适用于大多数的价值观,但如果您例如使用true用它作为默认布尔值,它不可能将它设置为false,并有生存的考验:

var var1 = false; 

var1 = var1 || true; 

现在是true eventhough它已经有了价值。您将遇到与其他特定值相同的问题,例如0""

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