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

 

转载于:https://www.cnblogs.com/facial/p/5101875.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值