js判断undefined和null

JavaScript 中有两个特殊数据类型:undefined 和 null。下面将介绍如何判断 undefined 和 null。

  • 变量被声明但没有赋值时,就等于 undefined。
  • 对象的某个属性没有赋值时,该属性的值为 undefined。
  • 调用函数过程中,应该提供的参数没有提供时,该参数就等于 undefined。
  • 函数没有返回值时,默认返回 undefined。

以下是不正确的用法:

var exp = undefined; if (exp == undefined) { alert( "undefined" ); }

在数字运算中被转换为 number 类型的值不同。在 null 上执行算术转换时,确定的值为 0,而 undefined 得出的结果为 NaN。

let a = 10 + null; console.log(a); // 10

undefined 和 null 是 JavaScript 中两种特殊的原始数据类型。它们都只有一个值,分别对应 undefined 和 null,这两种不同类型的值,即有着不同的语义和场景,但又表现出较为相似的行为。

  • undefined 是 JavaScript 基本类型之一,特指对象的值未设置,是表示缺少的标识,指示变量未指向任何对象,把 null 看为尚未创建的对象,也许更好理解。
  • null 是一个字面量,不像 undefined,它不是全局对象的一个属性。
  • 在布尔运算中被认为是 false。
  • 与其他任何对象一样永远不会被 JavaScript 隐式赋值给变量。

如果 JavaScript 预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为 false,其他值都视为 true。

  • undefined
  • null
  • false
  • 0
  • NaN
  • "" 或 ''(空字符串)

相等但不全等:

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

实际上,undefined 值是派生自 null 值的,ECMAScript 标准规定对二者进行相等性测试要返回 true,可以理解为 null 和 undefined 都代表着无效的值,所以二者相等,但由于是两种不同的原始数据类型,所以不全等。

typeof undefined // undefined typeof null // object
  • typeof null 结果是 object,这是个历史遗留 bug。
  • 在 ECMA6 中,曾经有提案为历史平反,将 typeof null 的值纠正为 null,但最后提案被拒了,理由是历史遗留代码太多,不想得罪人,不如继续将错就错当和事老。

在 JavaScript 中,判断 undefined 和 null 有多种方法:

  • 使用 typeof 运算符。当变量的值为 undefined 时,typeof 返回字符串 "undefined"。当变量的值为 null 时,typeof 返回字符串 "object"。
  • 使用全等运算符(===)。当变量的值为 undefined 时,和 null 不全等。当变量的值为 null 时,和 undefined 不全等。
  • 使用双等号运算符(==)。当变量的值为 undefined 时,和 null 相等。当变量的值为 null 时,和 undefined 相等。

以上三种方法都可以判断 undefined 和 null,但在使用时应注意它们的差异,选择最