首页 > 关于js对象,不大理解的几个问题?

关于js对象,不大理解的几个问题?

var i=1;
i.d=2;
alert(i.d);  //undefined
--------
 var c=new Object();
 c.b=1;
 alert(c.b);    //1
------
 var e=new Object();
 e=2;
 e.b=1;
 alert(e.b);    //undefined

为什么第一个和第三个的输出是undefined?


typeof i // 'number'
i instanceof Object // Object

typeof e // 'number'
e instanceof Object // Object

i 和 e 这两个变量是属于js里的基本数据类型(原始类型)中的number,不是object
对象类型才是属性的集合,所以i.id和e.b是undefind


你的问题基本就是“自动装箱”的问题,当你通过property accessor访问一个原始数据类型时,执行引擎会先自动对原始类型数据装箱,变成对象后再调用其方法/属性。所以你的代码

var i = 1;
i.d = 2;//相当于:new Number(1).d = 2;
alert(i.d);//这里相当于:alert(new Number(1).d);

注意到问题了么?两次访问都重新装箱了new Number(1),所以在第一个对象上设置的d = 2,在第二次访问时,其实是不存在的哦


是引用类型与包装类型的区别,包装类型包括String,Boolean,Number,会在创建时有效,过了一就会消失。所以var i=1;
i.d=2;//并没有报错,
alert(i.d);//但是包装类型执行完毕就没有了。引用类型就不一样,会一直有效。所以会存在。
var e=new Object();//这个e在里面确实是对象,
e=2;//这时,你赋值 typeof e--》number,实际上确实包装类型 ( 这个是不是js中弱类型的体现,引用类型也可以转换成元素类型)
e.b=1;
alert(e.b); //所以没有了

【热门文章】
【热门文章】