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?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
你的问题基本就是“自动装箱”的问题,当你通过property accessor访问一个原始数据类型时,执行引擎会先自动对原始类型数据装箱,变成对象后再调用其方法/属性。所以你的代码
是引用类型与包装类型的区别,包装类型包括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); //所以没有了
i 和 e 这两个变量是属于js里的基本数据类型(原始类型)中的number,不是object
对象类型才是属性的集合,所以i.id和e.b是undefind