undefined与null的区别
undefined与null的区别
javascript中有两个值null、undefined比较难分辨,都是表示“无”的意思。
console.log(null == undefined);//返回 true console.log(null === undefined);//返回 false console.log(typeof undefined);//返回 undefined console.log(typeof null);//返回 object console.log(null instanceof Object);//返回 false
这有点惊讶呀,出身不一样身份就是不一样呀!null、undefined本身是一样,在if判断中都自动转为false。undefined出身就是undefined,但null却好像来源Object,可惜Object家族又不认它。于是有人提出null就是javascript中的一个大大的bug呀,应该typeof null = null才对呀。事实的真相是什么呢?
原来,这与JavaScript的历史有关。1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示"无"的值。根据C语言的传统,null被设计成可以自动转为0。
console.log(Number(null));//返回 0 console.log(5 + null);//返回 5 console.log(5 + undefined);//返回 NaN
但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两个原因。首先,null像在Java里一样,被当成一个对象。但是,JavaScript的数据类型分成原始类型(primitive)和合成类型(complex)两大类,Brendan Eich觉得表示"无"的值最好不是对象。
其次,JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。Brendan Eich觉得,如果null自动转为0,很不容易发现错误。因此,Brendan Eich又设计了一个undefined。
目前null和undefined基本同义。如果要用一个字分别描述他俩的话,那么null是“空”,undefined是“无”。
null表示对象为空,没有对象(跟程序员一样吊丝呀),比如:
document.getElementById("id") == null;//当此id不存在时成立。 fun(null); //当参数时表示该函数的参数不是对象。 Object.create(null);//创建一个空的对象。 Object.getPrototypeOf(Object.prototype);// 返回null 表示对象原型链的终点
undefined表示缺少值,还没有定义,没找到此处本应该有的一个值,比如:
var i; alert(i); // 变量被声明了,但没有赋值时,就等于undefined。 function f(x){console.log(x)} f(); // 调用函数时,应该提供的参数没有提供,该参数等于undefined。 var o = new Object(); alert(o.p); // 对象没有赋值的属性,该属性的值为undefined。 var x = f(); alert(x); // 函数没有返回值时,默认返回undefined。
undefined和NaN,Infinity都是全局对象(window)的一个特殊属性,都不是JavaScript的保留关键字 。写插件时常常有人习惯传入undefined或定义局部undefined变量做比较,目的是减少作用域上的变量搜索,加快速度。
function fun(){ var undefined;//自定义局部undefined变量 } (function(win,undefined){ //直接传入undefined即能以防变量被重定义,又能加快判断速度 })(window,undefined);
关键词: undefined,null,js 编辑时间: 2014-11-11 15:32:57
3
高兴3
支持3
搞笑3
不解3
谎言3
枪稿1
震惊3
无奈3
无聊3
反对3
愤怒
- 中搜索:undefined与null的区别
- 中搜索:undefined与null的区别
- 暂无评论
网友评论