zoukankan      html  css  js  c++  java
  • 《JS权威指南学习总结--6.4检测属性》

    内容要点:

          js对象可以看做属性的集合,我们经常会检测集合中成员的所属关系-----判断某个属性是否存在于某个对象中,可以通过in运算符,hasOwnPreperty()和propertyIsEnumerable()方法来完成这个工作,甚至仅通过属性查询也可以做到这一点。

    一.in运算符

         in运算符的左侧是属性名(字符串),右侧是对象。如果对象的自有属性或继承属性中包含这个属性则返回true。

         var o = {x:1}

         "x" in o; //true,"x"是o的属性

         "y" in o; //false, "y"不是o的属性

         "toString" in o; //true,o继承toString 属性

    二.hasOwnPproperty()方法

        hasOwnProperty()方法用来检测给定的名字是否是对象的自有属性。对于继承属性它将返回false.

        var o= {x:1}

        o.hasOwnProperty("x"); //true,o有一个自有属性"x"

        o.hasOwnProperty("y"); //false,o中不存在属性"y"

        o.hasOwnProperty("toString"); //false,toString是继承属性

    三.propertyIsEnumerable()方法

       propertyIsEnumerable()方法是hasOwnProperty()的增强版,只有检测到自有属性且这个属性的可枚举性为true时它才返回true.某些内置属性的是不可枚举的。通常由js代码创建的属性都是可枚举的,除非使用Es5中使用一个特殊的方法来改变属性的可枚举性。

        var o = inherit({ y : 2 });

        o.x=1;

        o.propertyIsEnumerable("x"); //true,o有一个可枚举的自有属性

        o.propertyIsEnumberable("y"); //false,y是继承来的。

       Object.property.propertyIsEnumberable("toString");  //false:不可枚举

    四.

      除了使用in运算符之外,另一种更简单的方法是使用"!=="判断一个属性是否是undefined;

      var o = {x : 1}

      o.x !==undefined; //true,o中有属性x

      o.y!==undefined; //false,o中没有属性y

      o.toString !==undefined; //true,o继承了toString属性

    五.

      然而有一种场景只能使用in 运算符而不能使用上述属性访问的方式。in 可以区分不存在的属性和存在但值为undefined的属性。例如

      var o = { x : undefined } //属性被显式赋值为undefined;

     o.x !==undefined; //false,属性存在,但值为undefined;

     o.y!==undefined; //false,属性不存在

     "x" in o; //true,属性存在

     "y" in o; //fasle,属性不存在

     delete o.x; //删除了属性x

     "x" in o; //false,属性不再存在

     注意:上述代码中使用的是"!=="运算符,而不是"!="。"!=="可以区分undefined和null,有时则不必作这种区分。

        //如果o中含有属性x,且x的值不是null或undefined,o.x乘以2

        if(o.x!=null)o.x*=2;

       //如果那个o中含有属性x,且x的值不能转换为false o.x乘以2

      //如果x是undefined、null、false、" "、0或NaN,则它保存不变

      if(o.x) o.x*=2;

                                 

  • 相关阅读:
    菜单无限极分类核心代码
    获取页面中更新删除传过来的id
    CI循环数组问题
    ci框架model中的进行增删改的写法
    MySQL DBA的修炼与未来(参考篇)
    Linux学习笔记(13)linux软件安装rpm与yum--理论篇
    Linux学习笔记(12)linux文件目录与用户管理
    Linux学习笔记(11)linux网络管理与配置之一——配置路由与默认网关,双网卡绑定(5-6)
    Linux学习笔记(10)linux网络管理与配置之一——主机名与IP地址,DNS解析与本地hosts解析(1-4)
    自定义流水号,前置加0
  • 原文地址:https://www.cnblogs.com/hanxuming/p/5793000.html
Copyright © 2011-2022 走看看