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

javascript 如何避免属性访问错误的更多相关文章

  1. javascript中类的属性访问权限研究(1)

    本篇文章主要针对javascript的属性进行分析,由于javascript是一种基于对象的语言,本身没有类的概念,所以对于javascript的类的定义有很多名字,例于原型对象,构造函数等,它们都是 ...

  2. JavaScript对象属性访问的两种方式

    JavaScript对象属性访问的两种方式 object.attribute object["attribute"] 例如: var employees = [ { "f ...

  3. javascript属性访问表达式

    属性访问表达式运算得到一个对象属性或一个数组元素的值.js为属性访问定义了2中语法: expression.identifier expression["expression"] ...

  4. IIS发布网站,访问时出现无法识别的属性“targetFramework”错误

    今天在IIS发布网站后,访问时出现无识别的属性“targetFramework”错误 错误描述: 错误原因: 是由IIS配置该站点的.NET Framework 版本与程序中的.NET Framewo ...

  5. JavaScript(第二十七天)【错误处理与调试】

    JavaScript在错误处理调试上一直是它的软肋,如果脚本出错,给出的提示经常也让人摸不着头脑.ECMAScript第3版为了解决这个问题引入了try...catch和throw语句以及一些错误类型 ...

  6. javascript中的属性类型

    ECMA-262第5版在定义只有内部才用的特性(attribute)时,描述了属性(property)的各种特性.ECMA-262定义这些特性是为了实现javascript引擎用的,因此在javasc ...

  7. Sqlserver2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法

    Sqlserver2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法 最近几天从网上找了几个asp.net的登录案例想要研究研究代码,结果在用 Sql Server2005附 ...

  8. 深入理解JavaScript中的属性和特性

    深入理解JavaScript中的属性和特性 JavaScript中属性和特性是完全不同的两个概念,这里我将根据自己所学,来深入理解JavaScript中的属性和特性. 主要内容如下: 理解JavaSc ...

  9. SQLServer2005+附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法

    SQLServer2005+ 附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法 我们在用Sql SQLServer2005+附加数据库文件时弹出错误信息如下图的处理办法: 方案一: ...

随机推荐

  1. jquery属性选择器之 attr

    在温习jquery手册的时候,注意到这个,坐下记录. attr(name|properties|key,value|fn) 获取匹配的元素集合中的第一个元素的属性的值 或 设置每一个匹配的元素的一个或 ...

  2. C#接口的使用

    .接口: 接口与抽象类一样,也是表示某种规则,一旦使用了该规则,就必须实现相关的方法.对于C#语言而言,由于只能继承自一个父类,因此若有多个规则需要实现,则使用接口是个比较好的做法. .接口的定义 i ...

  3. Android-SVN

    服务器启动svn服务 svnserve -d -r /home/wbp/svn/actia/ 1 .svn  重新定位location , 改变新仓库的uuid , 今天操作SVN Client 发现 ...

  4. JavaScript--机选双色球

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. Hive学习之六 《Hive进阶— —hive jdbc》 详解

    接Hive学习五 http://www.cnblogs.com/invban/p/5331159.html 一.配置环境变量 hive jdbc的开发,在开发环境中,配置Java环境变量 修改/etc ...

  6. python challenge 16

    前情回顾:上一篇 第16关地址 打开16关,又是一张奇奇怪怪很多点点的图片,应该又是与PIL库有关的. 页面的标题是:let me get this straight.这是英语中的一句俚语,意思是让我 ...

  7. MySql数据库索引优化注意事项

    设计好MySql的索引可以让你的数据库飞起来,大大的提高数据库效率.设计MySql索引的时候有一下几点注意: 1,创建索引 对于查询占主要的应用来说,索引显得尤为重要.很多时候性能问题很简单的就是因为 ...

  8. 15 3Sum(寻找三个数之和为指定数的集合Medium)

    题目意思:给一个乱序数组,在里面寻找三个数之和为0的所有情况,这些情况不能重复,增序排列 思路:前面2sum,我用的是map,自然那道题map比双指针效率高,这道题需要先排序,再给三个指针,i.j.k ...

  9. js中的模块化编写思维

    作为一个新手程序员,在编程时一定要刻意锻炼自己的模块化编写思路,但是究竟什么才是模块化编写对于新人来说还是不太能够直观的理解,下面就举个简单的例子来说明一下 概念:最早接触模块化的说法是从java上, ...

  10. php中字符串编码

    php中抓取网页拼接url的时候经常需要进行编码,这时候就用到两个函数 mb_detect_encoding — 检测字符的编码. mb_convert_encoding — 转换字符的编码 < ...