这篇文章主要介绍了 Javascript 类型系统之 undefined 和 null 的知识,通过本文还简单给大家介绍了 javascript 中 null 和 undefined 的区别的相关资料, 非常不错,具有参考借鉴价值,需要的朋友可以参考下
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
前面的话
一般的程序语言,表示空的只有 null,但 javascript 的设计者 Brendan Eich 却设计了一个 undefined,这无疑增加了程序复杂度,但这样做也是有一定原因的。本文将详细介绍 javascript 中的 undefined 和 null
历史原因
1995 年 JavaScript 诞生时,最初像 Java 一样,只设置了 null 作为表示 "无" 的值。根据 C 语言的传统,null 被设计成可以自动转为 0
但是,JavaScript 的设计者 Brendan Eich,觉得这样做还不够,有两个原因。首先,null 像在 Java 里一样,被当成一个对象。但是,JavaScript 的值分成原始类型和对象类型两大类,Brendan Eich 觉得表示 "无" 的值最好不是对象。其次,JavaScript 的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。Brendan Eich 觉得,如果 null 自动转为 0,很不容易发现错误
因此,Brendan Eich 又设计了一个 undefined。他是这样区分的:null 是一个表示 "无" 的对象,转为数值时为 0;undefined 是一个表示 "无" 的原始值,转为数值时为 NaN
但是,目前 null 和 undefined 基本是同义的,都是原始类型,且只有一些细微的差别
undefined
Undefined 类型只有一个值,就是 undefined。当声明的变量未初始化时,该变量的默认值是 undefined。所以一般地,undefined 表示变量没有初始化
- var test; //undefined
- console.log(test == undefined); //true
- var test = undefined; //undefined
对于尚未声明过的变量只能执行一项操作,使用 typeof 操作符检测其数据类型,但严格模式下会导致错误
typeof(test);//undefined
【出现场景】
【1】已声明未赋值的变量
【2】获取对象不存在的属性
【3】无返回值的函数的执行结果
【4】函数的参数没有传入
【5】void(expression)
- var i;
- console.log(i); //undefined
- var o = {};
- console.log(o.p); //undefined
- function f() {};
- console.log(f()); //undefined
- function f(x) {
- return x;
- }
- console.log(f()); //undefined
- console.log(void(0)); //undefined
【类型转换】
- Boolean(undefined): false
- Number(undefined): NaN
- String(undefined):'undefined'
null
Null 类型只有一个值,就是 null。null 是 javascript 语言的关键字,它表示一个特殊值,常用来描述 "空值"
逻辑角度看,null 值表示一个空对象指针
[注意]null 是空对象指针,而 [] 是空数组,{}是空对象,三者不相同
- console.log(typeof null); //'object'
尽管 null 和 undefined 是不同的,但它们都表示 "值的空缺",null 表示 "空值",undefined 表示 "未定义"。两者往往可以互换。判断相等运算符 == 认为两者是相等的
- console.log(null == undefined); //true
实际上,因为 undefined 和 null 不是构造器类型,所以它们没有任何的属性和方法,使用. 和 [] 来存取这两个值的成员或方法都会产生一个类型错误
【类型转换】
- Boolean(null): false
- Number(null): 0
- String(null): 'null'
下面给大家介绍 javascript 中 null 和 undefined 的区别
undefined 表示变量声明但未初始化时的值,null 表示准备用来保存对象,还没有真正保存对象的值。从逻辑角度看,null 值表示一个空对象指针。
JavaScript(ECMAScript 标准)里共有 5 种基本类型:Undefined, Null, Boolean, Number, String,和一种复杂类型 Object。可以看到 null 和 undefined 分属不同的类型,未初始化定义的值用 typeof 检测出来是 "undefined"(字符串),而 null 值用 typeof 检测出来是 "object"(字符串)。
任何时候都不建议显式的设置一个变量为 undefined,但是如果保存对象的变量还没有真正保存对象,应该设置成 null。
实际上,undefined 值是派生自 null 值的,ECMAScript 标准规定对二者进行相等性测试要返回 true,即
- alert(null == undefined); // true
来源: http://www.phperz.com/article/17/0305/264298.html