javascript Null、Undefined 、NaN的联系与区别

相信许多初学 javascript 都会有这种想法: 为什么 javascript 有 null 又有 undefined ,相对 C , C++ ,Java ,他们都是只有 null 而已,为什么 javascript 就不同

一、历史原因

通过网络搜索得知,1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示"无"的值。根据C语言的传统,null被设计成可以自动转为0。

但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两个原因。

首先,null像在Java里一样,被当成一个对象。但是,JavaScript的数据类型分成原始类型(primitive)和合成类型(complex)两大类,Brendan Eich觉得表示"无"的值最好不是对象。

其次,JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。Brendan Eich觉得,如果null自动转为0,很不容易发现错误。

因此,Brendan Eich又设计了一个undefined。

二、相似性

现实中我们运用得到 null 和 undefined ,发现两者具有很强的相似性

1 var a = null;
2 var a = undefined;

以上两个变量赋值,老实说,基本上他们是没多大区别。

我们来看以下代码:

var a = null ;
var b = undefined;
console.log(a == b);
 // true

在运算符运算中,两者是等值的,事实上,在if语句判断中 null 和undefined 都会默认为false;那么既然两者含义和用法都如此相似,那么为什么还要设置个undefined 呢? 别着急,我们接下来继续看一段代码:

1 var a = null ;
2 var b = undefined;
3 console.log(typeof(a));
4 console.log(typeof(b));
5 //   object
6 //   undefined

从代码中可以看出,a b 赋值 null,undefined 后,通过类型判断得知,a 是一个对象,b 则还是undefined;

目前 null 和 undefined 只有一部分细微的差别 :

  null 表示“没有对象”,典型用法是:

  (1)  用于函数传参,表示函数 参数为一个空对象;
  (2)  作为 函数原型链终点;
Object.getPrototypeOf(Object.prototype)
// null

undefined 表示 “缺少值”,典型用法是:

(1)变量被声明了,但没有赋值时,就等于undefined。

(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。

(3)对象没有赋值的属性,该属性的值为undefined。

(4)函数没有返回值时,默认返回undefined。

 1 var i;
 2 i // undefined
 3
 4 function f(x){console.log(x)}
 5 f() // undefined
 6
 7 var  o = new Object();
 8 o.p // undefined
 9
10 var x = f();
11 x // undefined

看完 null undefined ,我们再来看看 NaN,还是先看一段代码:

1 var a = null ;
2 var b = undefined;
3 var c = NaN;
4 console.log(a==c);
5 console.log(b==c);
6 console.log(typeof(c));
 //  false
 //  false
//   number

从代码看出 NaN 既不是 null, 也不是 undefined,而是一个数字,一个特殊的数字,为什么说是一个特殊的数字呢?

1 var c = NaN;
2 var d="hello world";
3 console.log(isNaN(d));
4 console.log(c==NaN);
// true
// false

从以上得知,NaN  不等于自己, 那么它是用来表示什么的, W3C  的说法是 NaN 属性用于引用特殊的非数字值, 所以  NaN 常用判断 是否为 一个非数字类型,

无法使用 for/in 循环来枚举 NaN 属性,也不能用 delete 运算符来删除它。NaN 不是常量,可以把它设置为其他值。

时间: 2024-10-12 11:22:38

javascript Null、Undefined 、NaN的联系与区别的相关文章

2016.8.01 "" null undefined NaN 0 特殊比较是true还是false

在javascript的世界里,无论是函数,还是数组,还是对象,亦或是字符串,数字,布尔类型,在这些数据类型中,总有这么几个特立独行,然后造成一些可有可无的讨厌bug. 而这些讨厌bug出现的原因就是由于比较时产生的错误,而且最不易查出错误. 在这里我们整理了这几个特殊数据类型的比较.直接上代码. 上代码前,普及一个知识: ==内容比较,数据类型不比较. ===内容比较,数据类型也比较. 上代码: ==比较代码: // "" null undefined NaN 0 console.l

Javascript中undefined,NaN等特殊比较

以下内容转自: http://blog.csdn.net/hongweigg/article/details/38090093 1.问题:在Javascript中,typeof(undefined) == undefined成立吗? 答案:不成立,全局函数 typeof()返回值类型为字符串类型,六个可能值: "number", "string", "boolean", "object" ,"function&quo

简述null undefined NaN的异同

1. 类型分析:JS中数据类型有:undefined,boolean,number,string,object,前四种值类型(基础数据类型),object是引用类型 var a1; //undefined var a2=10; //number var a3="hello"; //string var a4=true; //boolean var a5=new Object(); //0bject var a6=NaN; //number var a7=null; //object v

js null, undefined, NaN, ‘’, false, 0, ==, === 全验证

<html> <head> <meta charset="utf-8" /> </head> <body> <input type="text" id="input_test"/> <script> ? var test = function(a){ // NaN, undefined if(a != a){ alert('NaN / undefined'); }

Js的null undefined NaN

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>第一个javascript计算页面</title></head><body> <script type="text/javascript"> var v1=null; var v2=NaN; var v3=

Is there a standard function to check for null, undefined, or blank variables in JavaScript?

You can just check if the variable has a truthy value or not. That means if( value ) { } will evaluate to true if value is not: null undefined NaN empty string ("") 0 false The above list represents all possible falsy values in ECMA-/Javascript.

【转】Javascript 中 null、NaN和undefined的区别

原址:http://www.cnblogs.com/qiantuwuliang/archive/2010/01/12/1645302.html 1.类型分析: js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型. 代码 var a1;var a2 = true;var a3 = 1;var a4 = "Hello";var a5 = new Object();var a6 = null;var a7 

JavaScript 中undefined,null,NaN的区别

1.类型分析: js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型.var a1;var a2 = true;var a3 = 1;var a4 = "Hello";var a5 = new Object();var a6 = null;var a7 = NaN;var a8 = undefined;alert(typeof a); //显示"undefined"alert(typ

Javascript 中 null、NaN和undefined的区别

1.类型分析: js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型. 代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->var a1;var a2 = true;var a3 = 1;var a4 = "Hello";var a5 = new O