电商网站的内容设计,网站下面版权代码,个人简历一键生成,北京又不让出京了来自普遍的回答: 其实在 ECMAScript 的原始类型中#xff0c;是有Undefined 和 Null 类型的。 这两种类型都分别对应了属于自己的唯一专用值#xff0c;即undefined 和 null。 值 undefined 实际上是从值 null 派生来的#xff0c;因此 ECMAScript 把它们定义为相等的#…来自普遍的回答: 其实在 ECMAScript 的原始类型中是有Undefined 和 Null 类型的。 这两种类型都分别对应了属于自己的唯一专用值即undefined 和 null。 值 undefined 实际上是从值 null 派生来的因此 ECMAScript 把它们定义为相等的通过下列代码可以验证这一结论 alert(undefined null); //true 尽管这两个值相等但它们的含义不同。 undefined 是声明了变量但未对其初始化时赋予该变量的值null 则用于表示尚未存在的对象。如果函数或方法要返回的是对象那么找不到该对象时返回的通常是 null。 所以alert(undefinednull);//false 说实话我没有看明白为什么undefined会继承null即然是继承那为什么undefined!null,还有未初始化的变量与函数返回的对象不存在之间有什么区别问题种种让人很不信服。 看看内存是怎么说的 Udefined代表没有赋值的基本数据类型。 Null代表没有赋值的引用数据类型。 我们来看一段代码 var age;
var id 100;
var div02 document.getElementById(div02);//注:div02是不存在的
var div01 document.getElementById(div01);//注:div01存在
alert(id);//100
alert(age);//undefined
alert(div02);//null
alert(div01);//object再来看一下内存的情况 解决第一个问题:为什么undefine继承自null 在Javascript中基本数据类型都有一个与其对应的引用数据类型number Number,string String,boolean Boolean...,他们具有完全相同的行为,并且相互之间会产生自动拆箱与装箱的操作。在内存分析一文中已经讲述了基本数据类型放在栈内存中的意义由此这们可以得出一个肤浅的结论基本数据类型是对应引用数据类型的子类只不过是为了提高效率将其放在栈内存中而已对应的Undefined代表无值的基本类型Null代表无值的引用类型那势必就可以推出undefined继承null。 解决第二个问题为什么undefinednull 推出来的答案undefined继承自null,内存告诉我们的答案他们都处于栈中 解决第三个问题为什么undefined!null 内存告诉我们它们的意义确实是不一样的老话一句Udefined代表没有赋值的基本数据类型Null代表没有赋值的引用数据类型。他们的内存图有很大的区别 解决额外的问题null是处理引用的为什么null处在栈内存中而不是堆内存中 答案一样的简单效率有必要在栈中分配一块额外的内存去指向堆中的null吗 额外的收获 当我们要切断与对象的联系但又并不想给变量赋于其他的值那么我们可了置null,如var obj new Object();objnull; 一些关于undefined和null的行为 null 参与数值运算时其值会自动转换为 0 因此下列表达式计算后会得到正确的数值 表达式123 null 结果值123 typeof null 返回object,因为null代表是无值的引用。 undefined是全局对象window的一个特殊属性其值为Undefined类型的专用值undefined undefined参与任何数值计算时其结果一定是NaN。 当声明的变量未初始化时该变量的默认值是undefined但是undefined并不同于未定义的值。Typeof运算符无法区分这两种值 因此对于变量是否存在的判断操作是通过if(typeof var ‘undefined’){ //code here } 来进行判断的,这样既完全兼容未定义(undefined)和未初始化(uninitialized)两种情况的 哈哈当你站在内存的高度的分析问题的时候如此抽象的东西有了实际的表现一切变得简单起来! -----------------------------更新 2010/11/01 -------------------------------------------- undefined与参数判断 我们行来看一个简单的函数 function bool(val){if(typeof val undefined){return true;}return !!val;
}这个函数有问题吗有因为typeof返回undefined值有两种可能一种是传进来的就是undefined,还有一种是没有传值。 alert(bool(undefined));//true
alert(bool());//true很明显bool(undefined)返回了不是我们所期望的false.怎么解决这个问题呢 function bool(val){if(arguments.length !0){return !!val;}return true;
}我们通过arguments参数长度来判断是否传递了参数从而区分函数传递的参数是undefined还是根本不就没有传值 chyingp 转载于:https://www.cnblogs.com/fool/archive/2010/10/07/1845253.html