JavaScript的检测属性、属性特性、枚举属性
/*
检测属性
检测属性可以通过三种方式
1.通过in运算符
2.通过hasOwnPerperty() 如果给定的属性是继承属性将返回false
3.通过propertyIsEnumerable():只有检测到的自有属性且这个属性的可枚举性为true时它才返回true,某些内置对象是不可枚举的,通常由JavaScript代码创建的对象的属性是可枚举的。
*/ var o = { x: 1}; "x" in o.x; //true
"y" in o.x; //false
"toString" in o.x //true o继承toString 属性 o.hasOwnProperty("x"); //true
o.hasOwnProperty("y"); //false
o.hasOwnProperty("toString") //false:toString是继承来的属性 o.propertyisEnumerable("x"); //true
o.propertyisEnumerable("y"); //false
Object.prototype.propertyIsEnumerable("toString"); //false //除了使用in运算符之外,别一种更简便的方法是使用“!==”判断一个属性是否是undefined o.x !== undefined; //true
o.y !== undefined; //false
o.toString !== undefined; //true /*
枚举属性:
for/in循环可以在循环中遍历对象中所有可枚举属性(自有属性和继承属性),属性名称赋值给循环变量。对象继承内置方法不可枚举,但在代码中给对象添加的属性都是可枚举的
*/ /*
属性特性
数据属性的四个特性:值(value)、可写性(writable)、可枚举性(enumerable)、可配置性(configurable).
存取器属性的四个特性:取(get) 、 写入(set)、可枚举性和可配置性 为了实现属性的查询和设置操作,ECMAScript5中定义了一个名字为"属性描述符"
数据属性描述符:value writrable enumerable configurable 通过调用Object.getOwnPropertyDescription()(只能得到自有属性的描述符)可以获得某个对象特定属性的属性描述符: //返回 {value: 1, writrable:true, enumerable:true, configuration:true}
Object.getOwnPropertyDescrition({x:1}, "x"); 对于继承属性和不存在的属性:返回undefined 要想设置属性的特性,歌者想让新建属性具有某种特性,则需要调用Object.definProperty(),传入要修改的对象、要创建或修改的属性的名称以及属性描述符对象; Object.definProperty(o, "x", {x:1, writable: true, enumerable: false, configurable: true}); 如果要同时修改或创建多个属性,则需要使用Object.defineproperties(),第一个参数是要修改的对象,第二个参数是一个映射表,它包含要新建或修改的属性的名称,以及它们的属性描述符,如: var p = Object.defineProperties({},{
x: {x:1, writable: true, enumerable: false, configurable: true},
y: {x:1, writable: true, enumerable: false, configurable: true},
r: {
get: function() {return Math.sqrt(this.x*this.x + this.y*this.y) },
enumerable: true,
configrable: true
}
});
*/
JavaScript的检测属性、属性特性、枚举属性的更多相关文章
- JavaScript类型检测, typeof操作符与constructor属性的异同
*#type.js function Person(name, age) { this.name = name; this.age = age; } var d = {an: 'object'}; v ...
- javascript中对象的属性的特性
1.ES5的属性特性包括下面六个: configurable: 表示能否通过delete来删除属性从而重新定义属性,能够修改属性的特性,默认为true enumberable: 表示是否能通过for- ...
- 你必须知道的.NET之特性和属性(转)
1. 引言 attribute是.NET框架引入的有一技术亮点,因此我们有必要花点时间走进一个发现attribute登堂入室的入口.因为.NET Framework中使用了大量的定制特性来完成代码约定 ...
- .NET之特性和属性
1. 引言 attribute是.NET框架引入的有一技术亮点,因此我们有必要花点时间走进一个发现attribute登堂入室的入口.因为.NET Framework中使用了大量的定制特性来完成代码约定 ...
- .NET之特性和属性(转)
1. 引言 attribute是.NET框架引入的有一技术亮点,因此我们有必要花点时间走进一个发现attribute登堂入室的入口.因为.NET Framework中使用了大量的定制特性来完成代码约定 ...
- js 对象可枚举属性以及for in 循环和for of 循环
js中每个对象的属性(js里万物皆属性,对象的属性也是对象)都有一个属性叫enumerable(可枚举性),这个属性true/false决定了该对象的属性是否可枚举(就是让一些方法访问到这个属性). ...
- 深入理解枚举属性与for-in和for-of
首先要分清什么是可枚举属性,什么是不可枚举属性 1.可枚举属性 在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被f ...
- javaScript 工作必知(八) 属性的特性 值、写、枚举、可配置
属性的特性 每个对象都拥有属性,属性具有哪些特性呢? 1.属性具有值. 2.属性是否是可写的. 3.是否是可枚举的. 4.是否是可配置的. " ...
- JavaScript 之 对象属性的特性 和defineProperty方法
对象是无序属性的集合,而这些属性在创建是都带有一些特征值(可以理解为属性的属性,天生自带的),这些特征值是为了实现JavaScript引擎用的,因此JavaScript不能直接访问. JavaScri ...
随机推荐
- bug_ _fragment_“The specified child already has a parent. You must call removeView"的解决以及产生的原因
这个异常的出现往往是因为非法使用了某些方法引起的. 从字面意思上是说这个特定的child已经有一个parent了,你必须在这个parent中首先调用removeView()方法,才能继续你的内容.这里 ...
- Android listview中使用checkbox
最近比较忙碌,我也不知道忙的什么东西,打算写的博客写了一半,还没写完,今天先扯一扯项目中遇到的一个问题,一方面防止以后遇到这个问题忘记如何解决,另一方面希望可以提供给遇到同样问题的朋友一个思路.下面开 ...
- StringIO 模块用于在内存缓冲区中读写数据
模块是用类编写的,只有一个StringIO类,所以它的可用方法都在类中.此类中的大部分函数都与对文件的操作方法类似. 例: #coding=gbk import StringIO s=StringIO ...
- Java多线程之Wait()和Notify()
1.Wait()和Notify.NotifyAll都是Object的方法 2.多线程的协作是通过控制同一个对象的Wait()和Notify()完成 3.当调用Wait()方法时,当前线程进入阻塞状态, ...
- 为FaceBook审核提交模拟器包及自己验证模拟器包
为FaceBook审核提交模拟器包及自己验证模拟器包折腾了一番,因为我的项目是用cocoapods管理的,所以跟普通直接运行name.xcodeproj项目有所不同. 切入正题 1.先设置 relea ...
- dede上怎么让所有链接在新窗口打开
网页的头部,添加:<base target="_blank"> <base target="_blank"> </head> ...
- Play framework(二)
Play 2.0 的完整演示过程记录 http://www.oschina.net/translate/playframework-20-live-coding-script todolist代码
- [Java] java中的接口定义
在Java的通常规范中,对数据成员的修改要通过接口提供的方法进行(如下面示例中接口中的void learnMath(int hours)和void learnEnglish(int hours)),这 ...
- ubuntu 服务管理
在Linux系统下,一个Services的启动.停止以及重启通常是通过/etc/init.d目录下的脚本来控制的.然而,在启动或改变运行级别时,是在/etc/rcX.d中来搜索脚本.其中X是运行级别的 ...
- python3 字符串方法(1-15)
1.capitalize() 将字符串的第一个字符改为大写 >>> s='i love cnblog' >>> s.capitalize() 'I love cnb ...