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)//显示1javascript不是完全面向对象么?

解决方案 »

  1.   

    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才有自定义属性
      

  2.   


    为什么值类型不可以有自定义属性
    因为 
    1)你很难区分 这个是小数点 还是 对象属性点
    1.1  这里的点是小数点
    1.x  这里的点是?对象子属性符号?上面是 联想 呵呵主要是 和性能有关把 
    ( 是直接看我手上有多少钱 还是用手从裤兜里拿出钱看我有多少钱?)对象类型的话 是一个复杂嵌套结构 对于对象的引用是需要指针的
    值类型就是一个简单的结构 值的引用? 引用本身就是值如果 变量a 是一个(指向一个) object  那么  a的实际值 是一个数字 这个数字代表 一个地址 这个地址开始才是这个object的存放位置如果 变量a 是一个 数字  那么 a的实际值  就是这个数字(这个情况下没办法添加子属性 要么a变成一个对象 好吧那么数值计算的性能又麻烦了)