如楼上所说,用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类的设计者就不让这样呢~
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]); }
function getEnumerableProLenth ( obj ) { // 用来保存所有的属性名称和值 var len= 0 ; // 开始遍历 for ( var p in obj ){ if(obj.propertyIsEnumerable(p)) { len++; } } return len; }
propertyIsEnumerable 属性如果 proName 存在于 object 中且可以使用一个 For…In 循环穷举出来,那么 propertyIsEnumerable 属性返回 true。如果 object 不具有所指定的属性或者所指定的属性不是可列举的,那么 propertyIsEnumerable 属性返回 false。典型地,预定义的属性不是可列举的,而用户定义的属性总是可列举的。propertyIsEnumerable 属性不考虑原型链中的对象。
给出一般的属性和方法倒可以:function allPrpos ( obj ) {
// 用来保存所有的属性名称和值
var props = "" ;
// 开始遍历
for ( var p in obj ){
if(obj.hasOwnProperty(p))
{
alert("属性:"+p+",值:"+obj[p]);
}else
{
alert("方法:"+p+"(),值:"+obj[p]);
}
}多说一句:也许,是Array类的设计者就不让这样呢~
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]);
}
function getEnumerableProLenth ( obj ) {
// 用来保存所有的属性名称和值
var len= 0 ;
// 开始遍历
for ( var p in obj ){
if(obj.propertyIsEnumerable(p))
{
len++;
}
}
return len;
}