js 关键字 in 的使用方法

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

  对于数组 ,迭代出来的是数组元素 但不推荐,由于不能保证顺序,并且若是在Array的原型上添加了属性,这个属性也会被遍历出来,因此 
  最好数组使用正常的for循环,对象使用for-in循环
  对于对象 ,迭代出来的是对象的属性;
java

  var obj = {
    "key1":"value1",
    "key2":"value2",
    "key3":"value3"
  };

  function EnumaKey(){
    for(var key in obj ){
      alert(key);
    }
    }

    function EnumaVal(){
      for(var key in obj ){
        alert(obj[key]);
        }
      }数组

javascript中in关键字还有下面的做用
定义:this

in操做符用来判断某个属性属于某个对象,能够是对象的直接属性,也能够是经过prototype继承的属性。
var Fn = function () { this.age = 1; };
Fn.prototype.name = 'jim';
// Fn.prototype.age = undefined;
var f = new Fn();
// hasOwnProperty
// 如何判断属性是被继承的???
console.log( 'age' in f && !f.hasOwnProperty( 'age' ) );
// age 可能存在原型链上, 也可能不存在

// 若是属性值就是 null 或 undefined, 那么此时 f.age 就没法判断了spa

对于通常的对象属性须要用字符串指定属性的名称prototype

如:
var mycar = {make: "Honda", model: "Accord", year: 1998};
"make" in mycar // returns true
"model" in mycar // returns true对象


若是你使用delete操做符删除了一个属性,再次用in检查时,会返回false,如:继承

var mycar = {make: "Honda", model: "Accord", year: 1998};
delete mycar.make;
"make" in mycar; // returns false

var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
delete trees[3];
3 in trees; // returns false
若是你把一个属性值设为undefined,可是没有使用delete操做符,使用in检查,会返回true.ip

var mycar = {make: "Honda", model: "Accord", year: 1998};
mycar.make = undefined;
"make" in mycar; // returns true原型链

var trees = new Array("redwood", "bay", "cedar", "oak", "maple");trees[3] = undefined;3 in trees; // returns true

相关文章
相关标签/搜索