日期:2014-05-16  浏览次数:20423 次

javascript对象的问题,求大神解释
var a=new Array();
a[0]=2;
a[0].x=1;
alert(a[0].x)//显示undefined


var a=new Array();
a[0]=new Number(2);
a[0].x=1;//或者a[0].x=new Number(1);
alert(a[0].x)//显示1

javascript不是完全面向对象么?

------解决方案--------------------
var a=new Array();
a[0]=2
alert(typeof a[0])/////number
a[0]=new Number(2);
alert(typeof a[0])//object
a[0].x=1;
alert(a[0].x)


类型不一样,知道了吧。。直接复制是值类型,new是引用类型,object,object才有自定义属性
------解决方案--------------------
引用:
Quote: 引用:

var a=new Array();
a[0]=2
alert(typeof a[0])/////number
a[0]=new Number(2);
alert(typeof a[0])//object
a[0].x=1;
alert(a[0].x)


类型不一样,知道了吧。。直接复制是值类型,new是引用类型,object,object才有自定义属性


为什么值类型不可以有自定义属性

因为 
1)你很难区分 这个是小数点 还是 对象属性点
1.1  这里的点是小数点
1.x  这里的点是?对象子属性符号?

上面是 联想 呵呵

主要是 和性能有关把 
( 是直接看我手上有多少钱 还是用手从裤兜里拿出钱看我有多少钱?)

对象类型的话 是一个复杂嵌套结构 对于对象的引用是需要指针的
值类型就是一个简单的结构 值的引用? 引用本身就是值

如果 变量a 是一个(指向一个) object  那么  a的实际值 是一个数字 这个数字代表 一个地址 这个地址开始才是这个object的存放位置

如果 变量a 是一个 数字  那么 a的实际值  就是这个数字(这个情况下没办法添加子属性 要么a变成一个对象 好吧那么数值计算的性能又麻烦了)