6.2.3 Property Access Errors
Property access expressions do not always return or set a value. This section explains the things that can go wrong when you query or set a property.
It is not an error to query a property that does not exist. If the property x is not found as an own property or an inherited property of o, the property access expression o.x evaluates to undefined. Recall that our book object has a “sub-title” property, but not a “subtitle” property:
property:book.subtitle; // => undefined: property doesn't exist
It is an error, however, to attempt to query a property of an object that does not exist.The null and undefined values have no properties, and it is an error to query properties of these values. Continuing the above example:
//Raises a TypeError exception. undefined doesn't have a length property var len = book.subtitle.length;
Unless you are certain that both book and book.subtitle are (or behave like) objects,you shouldn’t write the expression book.subtitle.length, since it might raise an exception. Here are two ways to guard against this kind of exception:
var len = book && book.title && book.title.length
To understand why this idiomatic expression works to prevent TypeError exceptions,you might want to review the short-circuiting behavior of the && operator in §4.10.1.
Attempting to set a property on null or undefined also causes a TypeError, of course.Attempts to set properties on other values do not always succeed, either: some prop-erties are read-only and cannot be set, and some objects do not allow the addition of new properties. Curiously, however, these failed attempts to set properties usually fail silently:
//The prototype properties of built-in constructors are read-only.
Object.prototype = 0;
//Assignment fails silently; Object.prototype unchanged
This historical quirk of JavaScript is rectified in the strict mode of ECMAScript 5. Instrict mode, any failed attempt to set a property throws a TypeError exception.
The rules that specify when a property assignment succeeds and when it fails are intuitive but difficult to express concisely. An attempt to set a property p of an object o fails in these circumstances:
•o has an own property p that is read-only: it is not possible to set read-only prop-erties. (See the defineProperty() method, however, for an exception that allowsconfigurable read-only properties to be set.) .
•o has an inherited property p that is read-only: it is not possible to hide an inheritedread-only property with an own property of the same name.
•o does not have an own property p; o does not inherit a property p with a setter method, and o’s extensible attribute (see §6.8.3) is false. If p does not already exist on o, and if there is no setter method to call, then p must be added to o. Butif o is not extensible, then no new properties can be defined on it.
ECMAScript 5
6.2.3 Property Access Errors的更多相关文章
- 消除警告"property access result unused - getters should not be used for side effects"
我写了如下一段代码: - (void)btnClicked:(UIButton *)button { switch (button.tag) { : self.initShare; break; de ...
- 使用asp.net MVC的 HtmlHelper 时遇到的小问题,报错:Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.
异常信息:Templates can be used only with field access, property access, single-dimension array index, or ...
- [Javascript] Intercept property access with Javascript Proxy
A Javascript Proxy object is a very interesting es6 feature, that allows you to determine behaviors ...
- [Javascript] Safer property access with Lodash's 'get' method
Property access in Javascript can be problematic - especially when dealing with nested Objects and A ...
- php中直接执行mysqli_init()也是报Property access is not allowed yet的错误。
xdebug.auto_trace = On 和 xdebug.profiler_enable = On注释掉就OK了,不知道这两个配置项是干嘛的
- python 随笔(property & __class__)
1. 属性装饰器: property @property def errors(self): """ Returns a list of form.errors for ...
- JavaPersistenceWithHibernate第二版笔记-第五章-Mapping value types-001Mapping basic properties(@Basic、@Access、access="noop"、@Formula、@ColumnTransformer、@Generated、 @ColumnDefaul、@Temporal、@Enumerated)
一.简介 在JPA中,默认所有属性都会persist,属性要属于以下3种情况,Hibernate在启动时会报错 1.java基本类型或包装类 2.有注解 @Embedded 3.有实现java.io. ...
- Spring 3.1 M1: Unified Property Management(转)
In the first two posts of this series, I described the bean definition profiles feature, and how it ...
- Access与SQL Server 语法差异
序号 简述 Access语法 SqlServer语法 Oracle语法 解决方案 01 系统时间 Now(),Date() GETDATE() SYSDATE GetSysTimeStr 02 连接字 ...
随机推荐
- ios开发之--使用AFN上传3.1.0上传视频,不走成功回调原因及解决方法
在测试接口的时候,发现接口称走走了,但是success的回调不走,检查了下代码,发现没有初始化下面两个方法: manage.responseSerializer = [AFHTTPResponseSe ...
- HTML开发之(块级标签,行内标签,行内块标签)
显示模式的特性: 主要分为两大类: 块级元素:独占一行,对宽高的属性值生效:如果不给宽度,块级元素就默认为浏览器的宽度,即就是100%宽: 行内元素:可以多个标签存在一行,对宽高属性值不生效,完全靠内 ...
- 在eclipse中查看android源代码
自己写了一个类MainAcvitivity extends Activity, 按F12(我把转到定义改成了F12的快捷键),转到Activity的定义,弹出下面这样的界面 就是说没有找到androi ...
- 【安全开发】IOS安全编码规范
申明:本文非笔者原创,原文转载自:https://github.com/SecurityPaper/SecurityPaper-web/blob/master/_posts/2.SDL%E8%A7%8 ...
- AddComponentRecursively
class AddComponentRecursively extends ScriptableWizard { var componentName : String = ""; ...
- 分布式计算开源框架Hadoop入门实践
目录(?)[+] Author :岑文初 Email: wenchu.cenwc@alibaba-inc.com msn: cenwenchu_79@hotmail.com blog: http:// ...
- ARM+LINUX嵌入式系统的终端显示中文乱码解决
前一段时间解决的一个问题,看起来是个小问题,实际解决这个问题却花了一个星期的晚上休息时间,记录分享一下. 问题描述: linux内核配置中NLS(native language support)已经选 ...
- centos7/nginx/tornado错误异常收集
临时方法 – 设置系统参数 使用命令setenforce 附: setenforce 设置SELinux 成为enforcing模式 setenforce 设置SELinux 成为permissive ...
- C# GIF图片的分解以及合成
dll下载的地址 http://www.codeproject.com/Articles/11505/NGif-Animated-GIF-Encoder-for-NET 使用主要调用的是Compo ...
- Host 'xxx.xx.xxx.xxx' is not allowed to connect to this MySQL server
改表法.可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "use ...