javascript for...in 语句

javascript for...in 语句

for...in 语句用于对数组或者对象的属性进行循环操作。

for ... in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。

Tip:for-in循环应该用在非数组对象的遍历上,使用for-in进行循环也被称为“枚举”。

语法:

for (变量 in 对象)
{
    在此执行代码
}

“变量”用来指定变量,指定的变量可以是数组元素,也可以是对象的属性。

实例:使用 for ... in 循环遍历数组。

<html>
<body>
<script type="text/javascript">
var x
var mycars = new Array()
mycars[0] = "Saab"
mycars[1] = "Volvo"
mycars[2] = "BMW"
for (x in mycars)
{
document.write(mycars[x] + "<br />")
}
</script>
</body>
</html>

应用可见这里:http://caibaojian.com/js-max-repeat.html

注意一:for in循环不会按照属性的下标来排列输出。http://www.cnblogs.com/rubylouvre/p/3396042.html

"first":"first",
   "zoo":"zoo",
  "2":"2",
  "34":"34",
  "1":"1",
  "second":"second"
};
for (var i in obj) { console.log(i); };
输出:
1
2
34
first
zoo
second

执行时按chrome执行,先把当中的非负整数键提出来,排序好输出,然后将剩下的定义时的顺序输出。由于这个奇葩的设定,让avalon的ms-with对象排序不按预期输出了。只能强制用户不要以纯数字定义键名。

实例1:在数组的原型对象上定义了一个新的属性,使用for循环没出现问题

function getNewArray(){
var array=[1,2,3,4,5];
Array.prototype.age=13;
var result = [];
for(var i=0;i<array.length;i++){
result.push(array[i]);
}
alert(result.join(‘‘));
}

实例2:采用了for in循环,但是给我们期望的一样还是得到了12345的正确结果

function getArrayTwo(){
var array=[1,2,3,4,5 ];
var result=[];
for(var i in array){
result.push(array[i]);
}
alert(result.join(‘‘));
}

实例3:给原型添加属性之后,默认情况下枚举,最后输出1234513

function getNewArrayTwo(){
var array=[1,2,3,4,5 ];
Array.prototype.age=13;
var result=[];
for(var i in array){
result.push(array[i]);
}
alert(result.join(‘‘));
}

所以建议不要对数组执行for in循环,事实上,在高性能javascript这本书中,也强调了for in循环的不好,因为它总是会访问该对象的原型,看下原型上是否有属性,这在无意中就给遍历增加了额外的压力。

解决方法:

如果某个对象具有给定名称的属性,那么Object.prototype.hasOwnProperty(name)返回true。如果该对象是从原型链中继承了该属性,或者根本没有这样的一个属性,则返回false。通过hasOwnProperty限定for in循环在当前中遍历,而不用去考虑它的原型属性。

function finalArray(){
var array=[1,2,3,4,5 ];
Array.prototype.age=13;
var result=[];
for(var i in array){
if(array.hasOwnProperty(i)){
result.push(array[i]);
}
}
alert(result.join(‘‘));
}

注意事项:

1.有一部分浏览器,例如早期的safari浏览器,不支持这个方法

2.对象经常被用作哈希值,这就是存在hasOwnProperty被另外的属性屏蔽的风险(但是我估计没有人那么无聊使用这个属性)

时间: 2024-08-28 22:12:21

javascript for...in 语句的相关文章

javascript的return语句简单介绍

javascript的return语句简单介绍:return语句在js中非常的重要,不仅仅具有返回函数值的功能,还具有一些特殊的用法,有个清晰的把握是非常有必要的.下面就结合实例简单介绍一下return语句的作用.一.用来返回控制和函数结果:通常情况,return语句对于一个函数是很有必要的,因为往往需要函数在一系列的代码执行后会得到一个期望的返回值,而此值就是通过return语句返回,并且将控制权返回给主调函数.语法格式: return 表达式 代码实例如下: function add(){

Javascript跳转语句

跳转语句,从名称上就可以看出,它使得Javascript的执行可以从一个位置跳转到另一个位置.break语句是跳转到循环或者其他语句的结束,continue语句是终止本次循环的执行并开始下一次循环的执行.Javascript中的语句可以命名或带有标签,break和continue可以标识目标循环或者其他语句标签. return语句让解释器跳出函数体的执行,并提供本次调用的返回值.throw语句触发或者抛出一个异常,它是与try/catch/finally语句一同使用的,这些语句指定了处理异常的代

JavaScript - 对象专用语句[ for...in 语句 ]

<html> <head> <head> <body> <script language="javascript"> // 对象专用语句 // for...in语句 /* * for(变量 in 对象){ * 执行语句块 * } */ function Person(){ this.name = "wjp" ; this.age = 22 ; this.height = 178 ; } var p1 = n

JavaScript - 对象专用语句[ with语句 ]

<html> <head> <head> <body> <script language="javascript"> // 对象专用语句 // with语句 /* * with(对象名称){ * 执行语句块 * } */ var current_time = new Date(); with(current_time){ var strDate = getYear() + "年" ; strDate +=

JavaScript中With 语句使用方法实例

内容导读: 有了 With 语句,在存取对象属性和方法时就不用重复指定参考对象,在 With 语句块中,凡是 JavaScript 不识别的属性和方法都和该语句块指定的对象有关.With 语句的语法格式如下所示: With Object { Statements } 对象指明了当语句组中对象缺省时的参考对象,这里我们用较为熟悉的 Document 对象对 With 语句举例.例如 当使用与 Document 对象有关的 write( )或 writeln( )方法时,往往使用如下形式: docu

javascript中with语句应用

语法格式: with(obj){} obj指明了语句组中对象缺省时的参考对象,就是代表该语句块中的默认作用域为obj. <html> <head> <title></title> <meta charset="utf-8"/> <script type="text/javascript"> function test(){ var obj=document.getElementById(&quo

JavaScript的循环语句

JavaScript的循环语句 1.JavaScript的循环语句 (1)for循环语句 - 循环代码块一定的次数: (2)for/in循环语句 - 循环遍历对象的属性: (3)while循环语句 - 指定的条件为true时,循环指定的代码: (4)do/while循环语句 - 当指定的条件为true时,循环指定的代码. 2.for循环语句 (1)for循环语句的语法 //for循环的语句语法 for(语句1;语句2;语句3){ //被执行的代码块 } 语句1:在循环开始前执行:可以省略,也可以

JavaScript强化教程——语句

本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程 —— 语句 条件语句 通常在写代码时,您总是需要为不同的决定来执行不同的动作.您可以在代码中使用条件语句来完成该任务. 在 JavaScript 中,我们可使用以下条件语句: if 语句 - 只有当指定条件为 true 时,使用该语句来执行代码if...else 语句 - 当条件为 true 时执行代码,当条件为 false 时执行其他代码if...else if....else 语句 - 使用该语句来选

javascript 用函数语句和表达式定义函数的区别详解

通常我们会看到以下两种定义函数的方式: // 函数语句 function fn(str) { console.log(str); }; // 表达式定义 var fnx=function(str) { console.log(str+ ' from fnx'); }; 两种方式都创建了新的函数对象, 但函数声明语句的函数名是一个变量名, 变量指向函数对象, 和通过var声明变量一样,函数定义语句中的函数被显示地提前到了脚本或函数的顶部, 因此它们在整个脚本和函数内都是可见的,但是使用var 表达