• javascript 如何避免属性访问错误


    var book = {subtitle: "Bible"};  

    var bookName = book.name.length // 这时候会出错,  因为试图查询这个不存在的对象的属性就会报错

    以下提供两种避免出错的方法:

    1.

    var len = undefined;

    if(book) {

      if(book.name) len = book.name.length;

    }

    2. 一种更简洁的常用方法, 获取name的length属性或者undefined

    var len = book && book.name && book.name.length;   // 不会报错, len = undefined

    检测属性方法: 

    可以通过in运算符, hasOwnProperty()方法, propertyIsEnumerable()方法来完成这个工作.

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

      var o = { x: 1 }
      "x" in o; // true: o has an own property "x"
      "y" in o; // false: o doesn't have a property "y"
      "toString" in o; // true: o inherits a toString property

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

      var o = { x: 1 }
      o.hasOwnProperty("x"); // true: o has an own property x
      o.hasOwnProperty("y"); // false: o doesn't have a property y
      o.hasOwnProperty("toString"); // false: toString is an inherited property


    3. propertyIsEnumerable()是hasOwnProperty()的增强版, 只有检测到是自有属性且这个属性的可枚举性为true的时候它才返回true. 

      var o = inherit({ y: 2 });
      o.x = 1;
      o.propertyIsEnumerable("x"); // true: o has an own enumerable property x
      o.propertyIsEnumerable("y"); // false: y is inherited, not own
      Object.prototype.propertyIsEnumerable("toString"); // false: not enumerable

  • 相关阅读:
    bzoj5253 [2018多省省队联测]制胡窜
    bzoj5249 [2018多省省队联测]IIIDX
    bzoj5248 [2018多省省队联测]一双木棋
    HEOI2018 游记
    bzoj2720 [Violet 5]列队春游
    bzoj4871 [Heoi2017]摧毁“树状图”
    bzoj3991 [SDOI2015]寻宝游戏
    bzoj3598 [Scoi2014]方伯伯的商场之旅
    Flash平台的分析与RIA的趋势
    JavaScript的变量预解析特性
  • 原文地址:https://www.cnblogs.com/facial/p/5101875.html
Copyright © 2020-2023  润新知