对象——对象的属性一些操作(第二层)

原创 2016年08月30日 16:08:22

一、

属性访问错误和设置错误

属性访问错误:

                          查询一个不存在的属性并不会报错,如果在对象o自身的属性或继承的属性均未找到属性x,属性访问表达式o.x返回undefined。

                          如果对象不存在,那么查询不存在对象的属性就会报错。null和undefined值都没有属性。因此会报错。

设置错误:

                   null和undefined设置属性也会报类型的错误

                   有一些属性是只读的,不能重新赋值,失败但不会报错。在ECMAScript5的严格模式中已经修复。

                   在这些场景下给对象o设置属性p会失败:

                                                                                     o中的属性p是只读的:不能给只读属性重新赋值(defineProperty()方法中有一个例外,可以对可配置的只读属性重新赋值)。

                                                                                     o中属性p是继承属性,且它是只读的:不能通过同名自有属性覆盖只读的继承属性。

                                                                                     o中不存在自有属性p:o没有使用setter方法继承属性p,并且o的可扩展性是false。


二、

删除属性

delete 运算符可以删除对象的属性。delete只是断开属性和宿主对象的联系,而不会去操作属性中的属性。例如,delete book.author;

delete运算符只能删除自有属性,不能删除继承属性。

delete删除成功或没有任何副作用(比如删除不存在的属性时),它返回true。如果delete后不是一个属性访问表达式,delete同样返回true。

delete不能删除那些可配置性为false属性(尽管可以删除不可扩展对象的可配置属性)。

在严格模式中,删除一个不可配置属性会报一个类型的错误。在非严格模式中,会返回false:

delete Object.prototype;                 //不能删除,属性是不可配置
var x = 1;                               //声明一个全局变量
delete this.x;                           //不能删除这个属性,通过变量声明和函数声明创建的全局对象的属性,这个内置对象的属性是不可配置。会返回false
function(){};                            //声明一个全局函数
delete this.f;                           //也不能删除全局函数


三、

检测属性:判断某个属性是否存在于某个对象中:


1、in运算符:如果对象的自有属性或继承属性中包含这个属性则返回true。

var o = { x = 1};                         
"x" in o;                                 //<span style="font-family: Arial, Helvetica, sans-serif;">true:"x"是o的属性</span>
"y" in o;                                 //false
"toString" in o;                          //true:o继承toString属性

2、hasOwnPreperty():检测给定的名字是否是对象的自有属性,对于继承属性它将返回false。

var o  = { x :1 }
o.hasOwnProperty("x");                    //true:o有一个自有属性x
o.hasOwnProperty("y");                    //false
o.hasOwnProperty("toString");             //false:toString是继承属性


3、propertyIsEnumerable():检测到是自有属性且这个属性的可枚举性为true时它才返回true。

Object.prototype.propertyIsEnumerable("toString");           //false:不可枚举



4、!==:判断一个属性是否是undefined。

var o = { x:undefined };                  //属性被显示赋值undefined
o.x !== undefined                         //false:属性存在,但值为undefined
o.y !== undefined                         //false:属性不存在
"x" in o                                  //true:属性存在
"y" in o                                  //false:属性不存在
delete o.x                                //删除了属性x
"x" in o                                  //false:属性不再存在


枚举属性:遍历对象的属性。for/in循环可以在循环体中遍历对象中所有可枚举的属性(包括自有属性和继承属性),把属性名称赋值给循环变量。

for (p in o) {                               //跳过继承属性
    if (!o.hasOwnProperty(p))
    continue;
} 
for (p in o) {                               //跳过方法
    if (typeof o[p] === "function")
    continue;
}
*Object.keys():它返回一个数组,这个数组由对象中可枚举的自有属性的名称组成。
  Object.getOwnPropertyNames()::它返回对象的所有自有属性的名称,而不仅仅是可枚举的属性。





版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

js 实现图片预加载 (js操作 Image对象属性complete ,事件onload 异步加载图片)

通过js操纵DOM很多情况下都是为了实现和当前页html元素的异步载入,我谈谈对Image对象的一些认识。 看个例子:     function addImg(isrc)     {...
  • sas5215
  • sas5215
  • 2011年11月25日 10:08
  • 350

JavaScript 对象属性操作和方法学习笔记(上)

属性访问错误查询对象中一个不存在的属性并不会报错,如果在对象obj自身的属性或者继承的属性中都没有找到属性attr,属性访问表达式 obj.attr 会返回 undefined ,而如果对象不存在,那...

js操作XML/HTML常用的对象属性

节点对象属性  childNodes—返回节点到子节点的节点列表  firstChild—返回节点的首个子节点。  lastChild—返回节点的最后一个子节点。  nextSibling—返回...

【笔记】 《js权威指南》- 第6章 对象 - 6.5 - 6.6 属性操作2

  • zazisb
  • zazisb
  • 2016年04月02日 20:41
  • 211

根据属性操作JSON对象

最近在项目中需要大量操作一些定义好的JSON对象,在访问某个属性时经常要aaa.bbb.ccc来进行访问,这样每次都要判断前面的值是否为空,而且写代码时必须要非常清楚JSON的格式,否则很容易错误。另...

反射机制_介绍_Class对象获取_动态操作_构造器_方法_属性JAVA211-212

反射机制_介绍_Class对象获取_动态操作_构造器_方法_属性JAVA211-212

JQuery操作对象的属性

通过jQuery去操作前台对象(div,span...)的属性是很常见的事情,本文就简单的介绍几种操作情形。 1):通过属性值去获取对象 2):用JQuery去修改对象的属性值 3)...

js 实现图片预加载 (js操作 Image对象属性complete ,事件onload 异步加载图片)

通过js操纵DOM很多情况下都是为了实现和当前页html元素的异步载入,我谈谈对Image对象的一些认识。 看个例子:     function addImg(isrc)     {...
  • wswqiang
  • wswqiang
  • 2012年02月11日 14:34
  • 15844

JQuery操作对象的属性

通过JQuery去操作前台对象(div,span...)的属性是很常见的事情,本文就简单的介绍几种操作情形。 1):通过属性值去获取对象 2):用JQuery去修改对象的属性值 3)...

05、JS对HTML节点对象的属性操作:

JS对HTML节点对象的属性操作: 读 写 (什么叫读,什么叫写) html标签默认拥有的标签属性可以直接读或写         例如:var oBox = document.getElemen...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对象——对象的属性一些操作(第二层)
举报原因:
原因补充:

(最多只允许输入30个字)