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

原创 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()::它返回对象的所有自有属性的名称,而不仅仅是可枚举的属性。





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

如何创建一个新对象?如何使用对象中的属性和方法?

使用new 关键字来创建一个新的对象;     通过对象的实例用“.”(点)来调用对象中的属性和方法;     静态的方法和属性,也可以直接用类名“.”(点)来调用;...
  • qq_38173343
  • qq_38173343
  • 2017年06月05日 15:17
  • 246

jQuery 获取设置删除对象属性

获取、设置、删除jQuery对象的属性值 jQuery 提供了一系列处理元素属性的方法,可以获取属性值,设置一个属性值,通过映射对象设置多个属性值,通过函数动态设置属性值,也可以删除属性。可以通过...
  • ayinvany
  • ayinvany
  • 2016年05月10日 22:48
  • 5667

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

JS对HTML节点对象的属性操作: 读 写 (什么叫读,什么叫写) html标签默认拥有的标签属性可以直接读或写         例如:var oBox = document.getElemen...
  • chuipaopao163
  • chuipaopao163
  • 2016年07月03日 16:24
  • 1024

获取有关Json复杂数据,获取不了第二层对象

这张是获取的json 用的Gson,还在学习中 这个是Bean文件 这是LogCat,本人完全看不懂, 获取第一层的json可以。但是加上第二层就出现上面的LogCat,求...
  • hunjieguang2043
  • hunjieguang2043
  • 2017年01月02日 04:36
  • 826

Spring对对象属性的校验

场景:对对象的参数进行校验,如果不通过抛出异常 1.编写需要被校验的对象 public class Pet { @NotEmpty(message = "不能为空") priva...
  • fang_qiming
  • fang_qiming
  • 2017年12月19日 17:30
  • 40

java中对象,属性,和方法的关系到底是怎么样的?

5.object和Class的深入理解---属性和方法 参见以上例子,title就是对象的属性,close就是对象的方法,简单来讲,所有对象的方法都一样,就写在类中,只写一份。对象属性的值,每个...
  • mark_to_win
  • mark_to_win
  • 2014年08月10日 15:39
  • 1566

JS 对象属性访问的2种方式和用途

问题起源: 在学习JS的过程中遇到一道题目“判断一个字符串中出现次数最多的字符,统计这个次数”,在网上查到一个用对象的方法解题,看完表示一脸懵逼。对代码中o[char]不能理解。 代码如下: ...
  • shuren1991
  • shuren1991
  • 2017年03月28日 17:15
  • 1564

dom对象中常见节点的属性

onload = function(){         // 常见的节点属性         // 1.nodeValue表示节点的值 所有的节点都有该属性 一般文本节点才会使用         ...
  • wuqiongqiong_
  • wuqiongqiong_
  • 2017年06月03日 18:49
  • 333

对象——对象三个特性(第二层)

原型属性: 在ECMAScript5中,Object.getPrototypeOf():将对象作为参数传入,可以查询它的原型。在ECMAScript3中,o.constructor.prototyp...
  • qq_27397357
  • qq_27397357
  • 2016年08月31日 13:46
  • 94

JavaScript中对DOM对象进行操作

一、什么是DOM对象  DOM对象是文档对象模型,是基于浏览器编程一套API接口,通过它,我们可以访问HTML文档对象属性、方法、事件,还可以对其进行操作。 二、DOM节点树  在HTML中所有...
  • Hchengbowen
  • Hchengbowen
  • 2017年01月04日 16:43
  • 1112
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对象——对象的属性一些操作(第二层)
举报原因:
原因补充:

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