undefined==null和null的区别

当前位置:
& AS3 - null,NaN,undefined的区别
AS3 - null,NaN,undefined的区别
发布:hangge
Flex/Flash开发中,常常会遇到null,NaN,undefined,现特地做个总结。
1,变量类型不同,变量的默认初始值就不同:
int,uint - 0
Boolean - false
Number - NaN
String,Array,Object - null
未指定变量类型 - undefined
2,判断是否为空或未定义的方法也不一样
public function RectangularAxisItemRenderer(textWidth:Number=NaN,
guide:Guide=undefined):void{
if (guide){
if (!(isNaN(textWidth))){undefined与null的区别 - 阮一峰的网络日志
undefined与null的区别
大多数计算机语言,有且仅有一个表示"无"的值,比如,C语言的NULL,Java语言的null,Python语言的None,Ruby语言的nil。
有点奇怪的是,JavaScript语言居然有两个表示"无"的值:undefined和null。这是为什么?
一、相似性
在JavaScript中,将一个变量赋值为undefined或null,老实说,几乎没区别。
上面代码中,a变量分别被赋值为undefined和null,这两种写法几乎等价。
undefined和null在if语句中,都会被自动转为false,相等运算符甚至直接报告两者相等。
if (!undefined)
console.log('undefined is false');
// undefined is false
if (!null)
console.log('null is false');
// null is false
undefined == null
上面代码说明,两者的行为是何等相似!
既然undefined和null的含义与用法都差不多,为什么要同时设置两个这样的值,这不是无端增加JavaScript的复杂度,令初学者困扰吗?Google公司开发的JavaScript语言的替代品Dart语言,就明确规定只有null,没有undefined!
二、历史原因
最近,我在读新书时,意外发现了这个问题的答案!
原来,这与JavaScript的历史有关。1995年时,最初像Java一样,只设置了null作为表示"无"的值。
根据C语言的传统,null被设计成可以自动转为0。
Number(null)
但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两个原因。
首先,null像在Java里一样,被当成一个对象。但是,JavaScript的数据类型分成原始类型(primitive)和合成类型(complex)两大类,Brendan Eich觉得表示"无"的值最好不是对象。
其次,JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。Brendan Eich觉得,如果null自动转为0,很不容易发现错误。
因此,Brendan Eich又设计了一个undefined。
三、最初设计
JavaScript的最初版本是这样区分的:null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。
Number(undefined)
5 + undefined
四、目前的用法
但是,上面这样的区分,在实践中很快就被证明不可行。目前,null和undefined基本是同义的,只有一些细微的差别。
null表示"没有对象",即该处不应该有值。典型用法是:
(1) 作为函数的参数,表示该函数的参数不是对象。
(2) 作为对象原型链的终点。
Object.getPrototypeOf(Object.prototype)
undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:
(1)变量被声明了,但没有赋值时,就等于undefined。
(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
i // undefined
function f(x){console.log(x)}
f() // undefined
o = new Object();
o.p // undefined
var x = f();
x // undefined
一、什么是内存泄漏?
程序的运行需要内存。只要程序提出要求,操作系统或者运行时(runtime)就必须供给内存。
学习函数式编程,必须掌握很多术语,否则根本看不懂文档。
本文要回答一个很重要的问题:函数式编程有什么用?
学习函数式编程的过程中,我接触到了 Ramda.js。JS基础之undefined与null的区别分析
字体:[ ] 类型:转载 时间:
在JavaScript开发中,被人问到:null与undefined到底有啥区别?一时间不好回答,特别是undefined,因为这涉及到undefined的实现原理。
于是,细想之后,写下本文,请各位大侠拍砖。 总所周知: null == undefined 但是: null !== undefined 那么这两者到底有啥区别呢? null 这是一个对象,但是为空。因为是对象,所以 typeof null 返回 'object' 。 null 是 JavaScript 保留关键字。 null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值: 表达式:123 + null结果值:123 表达式:123 * null结果值:0 undefined undefined是全局对象(window)的一个特殊属性,其值是未定义的。但 typeof undefined 返回 'undefined' 。 虽然undefined是有特殊含义的,但它确实是一个属性,而且是全局对象(window)的属性。请看下面的代码:
代码如下: alert('undefined' in window); //输出:true var anObj = {}; alert('undefined' in anObj); //输出:false
从中可以看出,undefined是window对象的一个属性,但却不是anObj对象的一个属性。 注意:尽管undefined是有特殊含义的属性,但却不是JavaScript的保留关键字。 undefined参与任何数值计算时,其结果一定是NaN。 随便说一下,NaN是全局对象(window)的另一个特殊属性,Infinity也是。这些特殊属性都不是JavaScript的保留关键字! 提高undefined性能 当我们在程序中使用undefined值时,实际上使用的是window对象的undefined属性。 同样,当我们定义一个变量但未赋予其初始值,例如: var aV 这时,JavaScript在所谓的预编译时会将其初始值设置为对window.undefined属性的引用, 于是,当我们将一个变量或值与undefined比较时,实际上是与window对象的undefined属性比较。这个比较过程中,JavaScript会搜索window对象名叫‘undefined'的属性,然后再比较两个操作数的引用指针是否相同。 由于window对象的属性值是非常多的,在每一次与undefined的比较中,搜索window对象的undefined属性都会花费时 间。在需要频繁与undefined进行比较的函数中,这可能会是一个性能问题点。因此,在这种情况下,我们可以自行定义一个局部的undefined变 量,来加快对undefined的比较速度。例如:
代码如下: function anyFunc() {
//自定义局部undefined变量 if(x == undefined) //作用域上的引用比较 while(y != undefined) //作用域上的引用比较 };
其中,定义undefined局部变量时,其初始值会是对window.undefined属性值的引用。新定义的局部undefined变 量存在与该函数的作用域上。在随后的比较操作中,JavaScript代码的书写方式没有任何的改变,但比较速度却很快。因为作用域上的变量数量会远远少 于window对象的属性,搜索变量的速度会极大提高。 这就是许多前端JS框架为什么常常要自己定义一个局部undefined变量的原因! 希望通过本文的介绍,能给你带来帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具达内潍坊IT培训
美国上市公司 · 亿元级IT培训企业
课程咨询 :
javascript中null,undefined 的区别是什么?
&&& 现在的前端程序员需求已经不仅仅能用HTML布局,或者能用javascript写个特效那么简单的一件事了,也因为现在的初级前端太多,所以各大公司对于前端的面试要求也逐步提高,特别是对于基础知识的扎实程度,是否能活用所学知识这些方面给与的考验较为严格!开设java、php、UI、web前端、网络营销等课程,美国上市公司,年培训学员10万余人次,在用人单位中树立良好的口碑.
&&& 昨天一个群里一个伙伴面试失败,就是因为一个面试题一脸茫然,就是javascript中null,undefined 的区别!我们接触这两个词的频率并不低,但是初学者并不会很刻意的去探寻这个问题,这两者如此相似,那么具体有什么区别呢?用法又有什么不同呢?当然更多的人是以为这个不重要,能用javascript做特效就行了,其实一个人的基础是否扎实,就决定了,未来你到底是做的外包工作,还是开发的工作!
&&& 如果有正在学习前端/javascript的伙伴,不知道怎么学习,或者该学些什么才能找到工作的可以一起来我们的头条前端群,一整套前端学习路线及系统学习资料已上传到群文件!
&&& 在javascript中:
&&& null 表示一个对象是"没有值"的值,也就是值为"空";
&&& undefined 表示一个变量声明了没有初始化(赋值);
&&& undefined不是一个有效的JSON,而null是;
&&& undefined的类型(typeof)是潍坊达内:课程结合行业技术趋势及企业用人需求的变化,及时更新,课程至少每半年进行一次升级
&&& null的类型(typeof)是
&&& Javascript将未赋值的变量默认值设为
&&& Javascript从来不会将变量设为null.它是用来让程序员表明某个用var声明的变量时没有值的
&&& typeof undefined
&&& //"undefined"
&&& undefined :是一个表示"无"的原始值或者说表示"缺少值",就是此处应该有一个值,但是还没有定义.当尝试读取时会返回
&&& 例如变量被声明了,但没有赋值时,就等于undefined
&&& typeof null
&&& //"object"
&&& null : 是一个对象(空对象, 没有任何属性和方法);
&&& 例如作为函数的参数,表示该函数的参数不是对象;
&&& 在验证null时,一定要使用 === ,因为 == 无法分别 null 和 undefined
&&& null == undefined // true
&&& null === undefined // false
&&& 再来一个例子:
&&& Q:有张三这个人么?
&&& Q:张三有房子么?
&&& A:没有!
&&& undefined
&&& Q:有张三这个人么?
&&& Q: 张三有多少岁?
&&& A: 不知道(没有被告诉)
&&& 更多潍坊达内相关咨询扫一扫下方二维码
最新开班日期 &|
java培训班
开班日期:7月31日
ui设计培训班
开班日期:7月31日
开班日期:7月31日
开班日期:7月31日
达内新闻 &|
达内时代科技集团有限公司 版权所有 京ICP证8000853号-56下次自动登录
现在的位置:
& 综合 & 正文
理解undefined和null
来自普遍的回答:
其实在 ECMAScript 的原始类型中,是有Undefined 和 Null 类型的。 这两种类型都分别对应了属于自己的唯一专用值,即undefined 和 null。 值 undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的,通过下列代码可以验证这一结论: alert(undefined == null); //true
尽管这两个值相等,但它们的含义不同。
undefined 是声明了变量但未对其初始化时赋予该变量的值,null 则用于表示尚未存在的对象。如果函数或方法要返回的是对象,那么找不到该对象时,返回的通常是 null。
所以alert(undefined===null);//false
说实话,我没有看明白,为什么undefined会继承null,即然是继承那为什么undefined!==null,还有未初始化的变量与函数返回的对象不存在之间有什么区别,问题种种,让人很不信服。
看看内存是怎么说的:
Udefined代表没有赋值的基本数据类型。
Null代表没有赋值的引用数据类型。
我们来看一段代码:
var id = 100;
var div02 = document.getElementById("div02");
var div01 = document.getElementById("div01");
alert(id);
alert(age);
<table style="border-style: initial ! border-color: initial ! outline-width: 0px ! outline-style: initial ! outline-color: initial ! background-image: none ! background-attachment: initial ! background-origin: initial ! background-clip: initial ! background-color: initial ! text-align: left ! float: none ! vertical-align: baseline ! position: static ! left: auto ! top: auto ! right: auto ! bottom: auto ! height: auto ! width: auto ! font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace ! font-style: normal ! font-size: 1em ! min-height: inherit ! border-collapse: collapse ! border-width: 0px ! padding: 0px !import
&&&&推荐文章:
【上篇】【下篇】

我要回帖

更多关于 undefined和null的关系 的文章

 

随机推荐