var ary=[1,2,3];
Object.prototype.a="a"
Array.prototype.b="b";
for(i in ary){
alert(i+"="+ary[i]);
}
为什么用for in找不出Array对象的length等属性?这些属性又是存在哪里的?怎么暴露出来

解决方案 »

  1.   

    参见:http://www.javaeye.com/topic/404662
      

  2.   

    参见:
    propertyIsEnumerable 属性如果 proName 存在于 object 中且可以使用一个 For…In 循环穷举出来,那么 propertyIsEnumerable 属性返回 true。如果 object 不具有所指定的属性或者所指定的属性不是可列举的,那么 propertyIsEnumerable 属性返回 false。典型地,预定义的属性不是可列举的,而用户定义的属性总是可列举的。propertyIsEnumerable 属性不考虑原型链中的对象。
      

  3.   

    如楼上所说,用object自带的propertyIsEnumerable检测length属性,是false,所以,用for in 方式得不到的它的属性。
    给出一般的属性和方法倒可以:function allPrpos ( obj ) {
    // 用来保存所有的属性名称和值
    var props = "" ;
    // 开始遍历
    for ( var p in obj ){
      if(obj.hasOwnProperty(p))
      {
      alert("属性:"+p+",值:"+obj[p]);
      }else 
      {
      alert("方法:"+p+"(),值:"+obj[p]);
      }
    }多说一句:也许,是Array类的设计者就不让这样呢~
            
      

  4.   

    JavaScript For...In 声明
    For...In 声明用于对数组或者对象的属性进行循环操作。
    for ... in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。
    var ary=[1,2,3];
    Object.prototype.a="a"
    Array.prototype.b="b";
    for(var i in ary){
        alert(i+"="+ary[i]);
    }
      

  5.   


    function getEnumerableProLenth ( obj ) {
    // 用来保存所有的属性名称和值
    var len= 0 ;
    // 开始遍历
    for ( var p in obj ){
      if(obj.propertyIsEnumerable(p))
      {
          len++;
      }
    }
    return len;
    }