原文地址
我的博客

1.null 和 undefined

1.1 概述

null 与 undefined 含义非常相似,对于变量来说基本没有区别

var a = undefined;
// 或者
var a = null;

对于 if 语句两者都属于假值范畴,相等运算符(==)直接输出 true

if(!undefined){
    console.log('undefined is false');
}
// undefined is false

if(!null){
    console.log('null is false');
}
// null is false

console.log(undefined == null)
// true

1995 年 JavaScript 诞生的时候只有null,根据C语言传统,null 可以自动转为 0 。

console.log(Number(null)) // 0
console.log(5 + null) // 5

JavaScript的设计者 Brendan Eich 觉得不行。他认为表示“无”的值,最好不是对象。且刚开始JS不包括错误处理机制,自动转变为0,不容易发现错误。因此设计了undefined表示“此处无定义”的原始值,转变为数值是NaN

console.log(Number(undefined)) // NaN
console.log(5 + undefined) // NaN
1.2用法和含义
  • null:空置、未出错
  • undefined:未定义。多数是预期之外的错误

以下是几种返回undefined的场景

// 声明变量,但是没有赋值时引用此变量
var i;
console.log(i); //undefined

// 调用函数时,未传入参数
function(x){
    console.log(x);
}
f() // undefined

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

// 函数没有返回值
function(){}
console.log(f()) // undefined

2.布尔值

  • true
  • false

下面的运算符会返回布尔值:

  • 前置逻辑运算符:!
  • 相等运算符:=== !== == !=
  • 比较运算符:> >= < <=

如果JavaScript预期某个位置应该是boolean类型,自动将该位置的值转换为 boolean 类型。以下内容转换后是 false ,其余都视为 true

  • undefined
  • null
  • false
  • 0
  • NaN
  • “” 或 ” (空字符串)

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

if([]){
    console.log('true');
}
// true

if({}){
    console.log('true');
}
// true

3.参考链接

Axel Rauschmayer, Categorizing values in JavaScript

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注