2013年(92)
分类: 信息化
2013-04-19 02:36:25
原文:JavaScript quirk 2: two “non-values” – undefined and null 译文:「译」JavaScript 的乖僻 2:两个「空值」:undefined 和 null 译者:SingleSeeker 此文是?javascript 的 12 个乖僻(quirks)?系列的第二篇。 谢谢?@SingleSeeker?对本文的翻译。 以下是正文: 关于“空 值”或“空引用”,大多数编程言语只需一个值。比方,在 Java 顶用的是?null。 但是在 Javascript 中却有两个格外的值:undefined?和?null。 他们基本上是相同,但用法上却略有些不相同。 在这个?系列教程?的结尾,我会解释一下在 ECMAScript 6 中的一些改动。 undefined?是被言语本身所分配的。 如果一个变量还没有被初始化,那么它的值便是?undefined: > var foo; > foo undefined 同理,当缺失参数时 JavaScript 会分配一个?undefined: > function id(x) { return x } > id() undefined null?是被开发者用来明确指出某个值是缺失的, 例如,关于?JSON.stringify(): > console.log(JSON.stringify({ first: 'Jane' }, null, 4)) { "first": "Jane" } 校检:一个变量能否有值? 如果你想知道变量?v?能否有值,正常情况下,你需要一同查验?undefined?与?null。 走运的是两个值都是?false 型。 因此,只用一个区分,就可以一同查验这两项能否为真: if (v) { // v 有值 } else { // v 没有值 } 在本?系列?的第 5 有些——关于函数参数的处置——你将会看到更多的上面校检比方。 有一点要注意的是:这个检查也会把?false,-0,? 0,?NaN?与 '' 当成“空值”。 如果这不是你想要的,那么就不能运用上面的校检方法了。 你有两个选择。 有些人建议运用不等于(!=)来校检 v 既不是?undefined?或?null: if (v != null) { // v 有值 } else { // v 没有值 } 不过,这要求你要了解?!=?认为?null?只等于它自己或是?undefined。 我喜爱用更有可读性的?!==: if (v !== undefined