JavaScript 中 for (var i in data) 循环数组项

今天在改代码的时候发现有很多代码的循环是用 for(var i in data)写的,我通常都是用for(var i=0;i<data.length;i++)

就查看了一下,原来这两个是有区别的,不能等同使用。

<script>
Array.prototype.test = function () { };

function a (){
var arr = [1, 2];
for (var i in arr)
{
alert(i+"-------------"+arr[i]);
}
}
function b(){
var arr = [1, 2];
for(var i =0;i<arr.length;i++){
alert(i+"---------"+arr[i]);
}
}
a();
b();
</script>

我们看到a()会弹出三个对话框,分别是索引值:0、1还多了一个 test, 这个 test 是 Array.prototype.test 扩展得到的。

所以不能把 for (var i in data)  当作是 for (var i = 0; i < data.length; i++) 的简写。

参考:http://www.cftea.com/c/2014/08/6290.asp

时间: 2024-10-17 08:00:07

JavaScript 中 for (var i in data) 循环数组项的相关文章

关于Javascript中通过var关键字声明变量和function关键字声明函数的笔记

一.概念 1.变量声明 在JavaScript中,变量一般通过var关键字(隐式声明,let关键字声明除外)进行声明,如下通过var关键字声明a,b,c三个变量(并给其中的a赋值): var a=1,b,c; //关键字显式声明变量a,b,c,并给a赋值console.log(a); //1 //由于b,c未定义变量类型,因此输出"undefined"console.log(b); //undefinedconsole.log(c); //undefined //如果变量未声明,则输出

Javascript中的var和let

引子 我们先来看一个常见的例子, function func(){ for (var i = 0; i < 10; i++) { setTimeout(function(){ console.log(i) },1000) } } func() 输出的结果并不是我们预期的 0-9,而是输出了十个 10.而当我们把其中的 var 改成 let ,结果就成了 0-9. 原因 var 使用的是函数作用域,即 for 循环中的 var i 实际上在整个 func 函数中都有效.而 setTimeout 中

Javascript中的七大数据类型(data types)

JavaScript中的七大数据类型 1.undefined 未定义 1 undefined 2.null 空 1 null 3.boolean  布尔型 1 true; 2 false; 4.string 字符串 1 var myName = "Anet"; 2 var myAge = "20"; 3 //myName.myAge均为字符串 5.symbol  符号(ES6新引进的数据类型:防止属性名冲突) 1 var hello = Symbol("h

Javascript中的var self = this

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <script type="text/javascript"> // javascript中每个函数解析时, 都会创建两个特殊的变量: // 这和参数, 这两个变量都能在函数体内访问, 所以每个

javascript中的var关键字中的文章

javascript在声明变量时忽略var关键字是完全合法的.JavaScript作为弱类型(loosely-typed)的语言,不声明变量类型貌似是可以理解的,但是事实不是这么的直白,因为变量的属性除了类型外,还有作用域.下面举例说明: no.1 <script language="javascript"> var a = 0; document.write(a + '<br>'); var b = 1; function foo() { document.w

javascript中使用var定义变量的预编译效果

首先说明一点:javascript语法是非常灵活的,灵活的代价就是很容易导致不规范的编码和各种意想不到的运行结果.ECMAScript 5 引入了 严格模式 (strict mode),今后我们编写javascript代码最好都使用"use strict",规范我们的javascript代码.下面的测试代码不是基于严格模式. alert(a); var a;//已声明未赋值 alert(b);//未声明的变量 执行结果是:a打印undefined,b报错.这说明:var a;这条语句的

在JavaScript中使用json.js:使得js数组转为JSON编码

在json的官网中下载json.js,然后在script中引入,以使用json.js提供的两个关键方法. 1.数组对象.toJSONString() 这个方法将返回一个JSON编码格式的字符串,用来表示类型中的数据. 演示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"

JavaScript 中 如何判断一个元素是否在一个数组中

<script type="text/javascript"> var arrList=['12','qw','q','v','d','t']; console.log(arrList.indexOf('12')) >> 0 console.log(arrList.indexOf('d')) >> 4 console.log(arrList.indexOf('sdfds')) >> -1 </script> 利用indexOf

javascript中var、let和const的区别

在javascript中,var.let和const都可以用来声明变量,那么三者有什么区别呢?要回答这个问题,我们可以从先想想:三种不同的声明会影响变量的哪些方面?这些方面也就是变量的特性,那么变量有哪些特呢?无非就是两个:一个是变量的数据类型,是数字,字符串还是数组或者其他的,另一个就是变量的作用域,是全局的还是局部的,又或者是某个代码块的.因此我们可以从以下两个方面来探究三种声明方式的区别: 1.声明后变量的数据类型有什么不同? 2.声明后变量的作用域有什么不同? 先看第一个方面,数据类型有