欢迎您访问我爱IT技术网,今天小编为你分享的javascript教程:【数组Array进行原型prototype扩展后带来的for in遍历问题】,下面是详细的讲解!
数组Array进行原型prototype扩展后带来的for in遍历问题
Array.prototype.max=function()
{
return Math.max.apply({}, this);
};
var company=['Adobe','Apple','Google','Intel','Microsoft','Oracle','IBM','SUN'];
alert(company.length); //这里输出的长度是8,与上面定义的数组长度一致
//下面循环了9次,在IE6、IE7第一次循环时i值不是0而是上面原型扩展的方法名max,而在IE8、FF浏览器最后一次循环时i值才为max
for (var i in company)
{
alert('index is:'+i+'\nvalue is:'+company[i]);
}
//此时,你若仅想打印上面8个公司列表,用for in循环是不行了,即使你非要这样做,也要在循环内部做点判断,比如像下面这样:
for (var i in company)
{
if (!isNaN(i))
alert('index is:'+i+'\nvalue is:'+company[i]);
}
//当然,为了安全起见,也不要那么懒,就写成普通的for循环才是最科学的,像下面这样:
for (var i=0; i< company.length; i++)
{
alert('index is:'+i+'\nvalue is:'+company[i]);
}
//这种对数组原型扩展属性带来的循环问题通常是导致你得不到预期的结果,但不注意也可能给你代码带来难以发现的问题,看看下面的例子:
var userInfo=[["Tom",21,"020-12345678"],["Mike",23,"020-87654321"]]; //显然这里是数组嵌套
for (var i in userInfo)
{
//此时通过userInfo[i][0]可能根本得不到你预想的值,比如在这个循环中,你将看到有一次值为undefined的结果,这是因为当i值为max时,userInfo[i]是一个function而不是像这样的子数组 ["Tom",21,"020-12345678"]
alert('Name:' + userInfo[i][0] + '\nAge:' + userInfo[i][1] + '\nPhone:' + userInfo[i][2]);
}
关于数组Array进行原型prototype扩展后带来的for in遍历问题的用户互动如下:
相关问题:oc中 可变数组可以用forin遍历吗? 把可变数组里面...
答:NSMutableArray *arr = [NSMutableArray array]; NSArray *a = [NSArray arrayWithArray:arr]; 这样就行了 把arr这个可变数组变成a这个不可变数组 >>详细
相关问题:如何遍历Array.prototype中的属性和方法名?
答:那是因為Array.prototype的某些屬性被設定為[[DontEnum]],不能用一般的方法進行遍历。 但你可以在支援ES5的瀏覽器上用 Object.getOwnPropertyNames(Array.prototype)這方法,能突破這個限制 >>详细
相关问题:JS for in 循环中的key ,value 详解。
答: function fn(){ this.aa = "obj1"; this.bb = "obj2";}var json = {"aa":"json1","bb":"json2"};var obj = new fn();var radio = document.getElementById("radio"); console.log("-------------json----------------");for(var key in json){ ... >>详细
- 【firefox】firefox浏览器不支持innerText的解决
- 【Extjs】Extjs学习过程中新手容易碰到的低级错误
- 【clearInterval】js clearInterval()方法的定义
- 【ComboBox】ComboBox 和 DateField 在IE下消失的
- 【dom】javascript dom追加内容实现示例-追加内容
- 【has】基于jquery的has()方法以及与find()方法以
- 【extjs】Extjs入门之动态加载树代码-动态加载树
- 【checkbox】让checkbox不选中即将选中的checkbox
- 【Array】js中更短的 Array 类型转换-类型转换
- 【append】append和appendTo的区别以及appendChil
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
