null,undefined和布尔值

bull 和 undefined

概述

null 和 undefined 都可以表示 没有,含义非常类似,将一个变量赋值为 undefined 或 null,语法效果几乎没有区别

var a = undefined;

// 几乎等价于 

var a  = null;

在 if 语句中,它们都会被自动转为 false,相等运算符 == 甚至直接报告两者相等

undefined == null
// true

在谷歌开发的 JavaScript 的替代品 Dart 语言,就明确规定只有 null,没有 undefined

造成有两个如此相似的数据类型的,是历史原因。

  • 1995年,JavaScript 诞生时,像 Java 一样只设置了 null 表示 无,根据 C 语言的传统,null 可以自动转为 0

  • 但是,JavaScript 的设计者 Brendan Eich,觉得这样做不够

    • null 就像 Java 里一样,被当成一个对象,Brendan Eich 觉的表示 无 的值最好不是对象

    • 并且当时 JavaScript 没有错误处理机制,Brendan Eich 觉得 null 自动转为 0,很不容易发现错误

    • 因此,undefined 被设计了出来,和 null 区别如下:

      • null 是一个表示 空 的对象,转为数值时为 0;

      • undefined 是一个表示 此处无定义 的原始值,转为数值时为 NaN

Number(null) // 0
5 + null // 5

Number(undefined) // NaN
5 + undefined // NaN

用法和含义

null 表示空值,即该处的值现在为空。调用函数时,某个参数未设置任何值,这时就可以传入 null,表示该值为空

undefined 表示 未定义,下面是返回 undefined 的典型场景

// 变量声明了,但没有赋值
var i;
i // undefined

// 调用函数时,应该提供的参数没有提供,该参数等于 undefined
function f(x) {
  return x;
}
f(); // undefined

// 对象没有赋值的属性
var o = new Object();
o.p // undefined

// 函数没有返回值时,默认返回 undefined
function f() {}
f() // undefined

布尔值

布尔值代表 true 和 false 两个状态

下列运算符会返回布尔值:

  • 前置逻辑运算符:! (Not)

  • 相等运算符:=== !== == !=

  • 比较运算符:> >= < <=

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

  • undefined

  • null

  • false

  • 0

  • NaN

  • "" 或 '' 空字符串

注意,空数组 [] 和 空对象 {} 对应的布尔值都是 true

最后更新于