zoukankan      html  css  js  c++  java
  • JavaScript高级程序设计(七):JavaScript中的in关键字

    in

     使用点一: 在js中,for……in用于遍历一个对象的属性,把对象的属性名和属性值都提出来。

    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]);
        }
    }

      数组也可以用for……in进行遍历,但是不推荐使用这个。由于for……in遍历的顺序得不到保障,而且如果在Array的原型上添加了属性,这个属性也会被遍历出来。

      深入知识点

      在使用for in遍历对象时候,对象有一个重要的方法:hasOwnProperty()。该方法可以在遍历对象属性的时候可以过滤掉从原型链上下来的属性。举例说明:

      

    function testForIn(){
            var man={
                hands:2,
                legs:2,
                head:1
            }
    
            for(key in man){
                //如果不过滤,man对象将会遍历出clone这个属性
                if(man.hasOwnProperty(key)){
                    document.write(key+"  ");
                    document.write(man[key]);
                    document.write("<br/>");
                }
            }
        }
    
        function keyevent(){
            if(event.keyCode==13){
        //为全局对象添加一个clone属性
                if(typeof Object.prototype.clone === "undefined"){
                    Object.prototype.clone = function () {};
                }
                testForIn();
            }
        }    

    输出结果:

    //未使用hasOwnProperty()方法过滤
    hands 2
    legs 2
    head 1
    clone function () {}
    
    //使用hasOwnProperty()方法过滤 hands 2 legs 2 head 1

    使用点二:in操作符用来判断某个属性属于某个对象,可以是对象的直接属性,也可以是通过prototype继承的属性。

    注意事项:

    对于一般的对象属性需要用字符串指定属性的名称   如:

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

    对于数组属性需要指定数字形式的索引值来表示数组的属性名称(固有属性除外,如length)。

    // Arrays
    var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
    0 in trees        // returns true
    3 in trees        // returns true
    6 in trees        // returns false
    "bay" in trees    // returns false (you must specify the index number,
                      // not the value at that index)
    "length" in trees // returns true (length is an Array property)

    in的右边必须是一个对象,如:你可以指定一个用String构造器生成的,但是不能指定字符串直接量的形式:

    var color1 = new String("green");
    "length" in color1 // returns true
    var color2 = "coral";
    "length" in color2 // generates an error (color is not a String object)

    如果你使用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.

    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
  • 相关阅读:
    时间:UTC; GMT; DST; CST
    python解析XML:之二 (ElementTree)
    python解析XML:之一
    Wiki使用
    java基础:java环境,第一个Java程序,java的数组
    Oracle记录(二) SQLPlus命令
    Oracle记录(一)Oracle简介与安装
    DIY ESXI虚拟化服务器再度升级ESXI6.0 (U盘安装Esxi)
    【VMware虚拟化解决方案】 基于VMware虚拟化平台VDI整体性能分析与优化
    vmware workstation 网络管理
  • 原文地址:https://www.cnblogs.com/renxiaoren/p/5942767.html
Copyright © 2011-2022 走看看