JavaScript 中何时使用 null 或 unfined?

2022-08-30 05:05:50

我真的很困惑JavaScript何时返回或.此外,不同的浏览器似乎以不同的方式返回这些。nullundefined

您能否提供一些返回它们的浏览器的示例/。nullundefined

虽然我现在很清楚这个方面,但我仍然不是100%清楚。它是否类似于空白值?undefinednull

例如,您有一个文本框,其中没有设置任何值。现在,当您尝试访问其值时,它会是还是它们相似?nullundefined


答案 1

我发现其中一些答案是模糊而复杂的,我发现弄清楚这些事情的最佳方法是打开控制台并自己测试。

var x;

x == null            // true
x == undefined       // true
x === null           // false
x === undefined      // true

var y = null;

y == null            // true
y == undefined       // true
y === null           // true
y === undefined      // false

typeof x             // 'undefined'
typeof y             // 'object'

var z = {abc: null};

z.abc == null        // true
z.abc == undefined   // true
z.abc === null       // true
z.abc === undefined  // false

z.xyz == null        // true
z.xyz == undefined   // true
z.xyz === null       // false
z.xyz === undefined  // true

null = 1;            // throws error: invalid left hand assignment
undefined = 1;       // works fine: this can cause some problems

所以这绝对是JavaScript更微妙的细微差别之一。如您所见,您可以覆盖 的值,使其与 相比有些不可靠。据我所知,使用操作员,您可以可靠地使用和互换。但是,由于无法重新定义的优势,我可能会在使用时使用它。undefinednull==nullundefinednull==

例如,如果 等于 或 ,则始终返回 false,而如果等于其中一个或 EXCEPT 则返回 false。variable != nullvariablenullundefinedvariable != undefinedvariablenullundefinedundefined

如果需要确保值实际(而不是 ),则可以可靠地使用运算符来区分 和 。===undefinednullundefinednull

根据 ECMAScript 5 规范:

  • NullUndefined 都是六种内置类型中的两种。

4.3.9 未定义值

未为变量赋值时使用的基元值

4.3.11 空值

表示有意缺少任何对象值的基元值


答案 2

DOM 方法 、 、 等在调用未返回节点对象时返回(已定义但没有值)。getElementById()nextSibling()childNodes[n]parentNode()null

属性已定义,但它引用的对象不存在。

这是您可能不想测试平等的少数几次之一 -

if(x!==undefined)对于空值,将为 true

但对于非非或 的值,将(仅)为 true。if(x!= undefined)undefinednull