在ECMAScript中有两种属性:数据属性和访问器属性

1、数据属性

configurable:表示能否通过delete删除属性从而重新定义属性;或者能否修改属性的特性;或者能否把属性修改为访问器属性。

enumerable:表示能否通过for-in循环返回属性。

writable:表示能否修改属性的值。

value:包含这个属性的数据值,读取属性的时候,从这个位置读;写入属性的时候,把新的值保存在这个位置。

2、访问器属性

configurable:表示能否通过delete删除属性从而重新定义属性;或者能否修改属性的特性;或者能否把属性修改为数据属性。

enumerable:表示能否通过for-in 循环返回属性。

get:在读取属性的时候调用的函数。

set:在设置属性的时候调用的函数。

①对于直接在对象上定义的属性,configurable、enumerable、writable的默认值为true:

var person={};
person.name="张三";
console.log(Object.getOwnPeopertyDescriptor(person,'name')) //Object {value: "张三", writable: true, enumerable: true, configurable: true}

②对于通过Object.defineProperty()或者Object.defineProperties()定义的属性,configurable、enumerable、writable的默认值为false:

var person={};
Object.defineProperty(person,'name',{value:'张三'});
console.log(Object.getOwnPropertyDescriptor(person,'name'));//Object {value: "张三", writable: false, enumerable: false, configurable: false}

③当configurable设置为false时,所有的属性就不能重新设定,也不能删除了。但是当configurable设置为false时,writable设置为true时,value属性的值是可以被直接更改的,但是当writable再次设置为false时,writable属性就不能重新设置回true了。

var b={};
Object.defineProperty(b,'b',{configurable:false,writable:true});
Object.getOwnPropertyDescriptor(b,'b')//Object {value: undefined, writable: true, enumerable: false, configurable: false}
Object.defineProperty(b,'b',{writable:false})
Object.getOwnPropertyDescriptor(b,'b')//Object {value: undefined, writable: false, enumerable: false, configurable: false}
Object.defineProperty(b,'b',{writable:true})//Uncaught TypeError: Cannot redefine property: b(…)

④访问器属性不能直接定义,只能通过Object.defineProperty()来定义。

⑤当访问器属性只设置了get属性,那么该属性是只读的;反之,当访问器属性只设置了set属性,那么该属性是只写的。

⑥一次性定义多个属性,可以用Object.defineProperties()

var person={};
Object.defineProperties(person,{name:{value:'张三',configurable:true},sex:{value:'男',writable:true}});
Object.getOwnPropertyDescriptor(person,'name')//Object {value: "张三", writable: false, enumerable: false, configurable: true}
Object.getOwnPropertyDescriptor(person,'sex')//Object {value: "男", writable: true, enumerable: false, configurable: false}

⑦查看对象对应的属性的configurable、enumerable、writable的值可以通过Object.getOwnPropertyDescriptor()方法。

Javascript学习笔记:对象的属性类型的更多相关文章

  1. javascript学习笔记(四) Number 数字类型

    数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数  toExponential() 方法 用科学 ...

  2. JavaScript学习笔记-对象

    枚举对象的属性:通常用for(...in...)来循环遍历,由于 for in 总是要遍历整个原型链,因此如果一个对象的继承层次太深的话会影响性能 for(var i in foo){ if(foo. ...

  3. JavaScript学习笔记(五)——类型、转换、相等、字符串

    第六章 类型 相等 转换等 一.类型 1 typeof(); typeof是一个内置的JavaScript运算符,可用于探测其操作数的类型. 例: <script language=" ...

  4. JavaScript学习笔记——对象基础

    javascript对象基础 一.名词解释: 1.基于对象 一切皆对象,以对象的概念来编程. 2.面向对象编程(oop Object oriented programming) A.对象 就是人们要研 ...

  5. JavaScript学习笔记——对象的创建

    对象是JavaScript基本数据类型,在JavaScript中除了Undefined.Null.布尔型(ture.false).字符串和数字之外,其他的都属于对象. 在JavaScript中,一个对 ...

  6. JavaScript学习笔记-基础语法、类型、变量

    基础语法.类型.变量   非数字值的判断方法:(因为Infinity和NaN他们不等于任何值,包括自身) 1.用x != x ,当x为NaN时才返回true; 2.用isNaN(x) ,当x为NaN或 ...

  7. JavaScript学习笔记——对象分类

    对象的分类 一.对象的分类 1.内置对象 Global Math 2.本地对象 Array Number String Boolean Function RegExp 3.宿主对象 DOM BOM 二 ...

  8. JavaScript学习笔记——对象知识点

    javascript对象的遍历.内存分布和封装特性 一.javascript对象遍历 1.javascript属性访问 对象.属性 对象[属性] //字符串格式 //javascript属性的访问方法 ...

  9. javascript学习笔记2-typeof、Number类型、Boolean()

    1.typeof操作符 对一个值使用typeof操作符可能返回下列某个字符串 "undefined"——这个值未定义 "boolean"——这个值是布尔值 &q ...

  10. javascript学习笔记 - 引用类型 基本包装类型

    六 基本包装类型 Boolean,Number,String 这三个引用类型亦称为基本包装类型,与基本的数据类型boolean,number,string相关联.为了方便操作这些基本类型的数据. 引用 ...

随机推荐

  1. 【iCore3双核心板】【4.3寸液晶驱动板爆照!】

     [源代码完全开源,过几天连同硬件一起发布] 花了好久的时间,我们的fpga工程师才完成这液晶模块的驱动代码,其核心价值如下: 1.完全基于fpga驱动,sdram当做缓存: 2.内建双缓冲机制:方便 ...

  2. LoadRunner11.00入门教程

    安装成功后,根据教程,有自带的应用程序供新手快速掌握Loadrunner的使用.测试应用是一个基于web的旅行社应用程序,也就是供用户在线预订机票的应用.根据教程和操作,重新总结一下测试流程以及遇到的 ...

  3. hibernate学习(1)——helloworld

    1. 框架体系结构 2. hibernate入门 2.1 ORM框架 Hibernate是一个数据持久化层的ORM框架. Object:对象,java对象,此处特指JavaBean Relationa ...

  4. Json 、 Jsonp

    SONP is simply a hack to allow web apps to retrieve data across domains. It could be said that it vi ...

  5. ASP.NET Global Application_Error事件中访问Session报错 解决

    报错信息:会话状态在此上下文中不可用 protected void Application_Error(object sender, EventArgs e) { //以此判断是否可用Session ...

  6. Java学习-048-插件应用之 Find Bugs

    FindBugs 是一个静态分析工具,它可以检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题,使用 FindBugs 可以在不实际运行程序的情况对软件进行分析.使用时最好将字节 ...

  7. JQuery兼容IE6问题汇总(不断更新)

    兼容IE6真是苦逼的差事,无奈中... 逗号的问题:IE6中要去掉最后的逗号 var o={ id:1, Name:"abc", //这里的逗号一定要去掉 } HTML的结构,由于 ...

  8. linux连接与传输等命令

    linux 远程连接windows rdesktop -a 16 223.223.111.8 远程连接到windows服务器 rdesktop -a 16 -r disk:home=/home 223 ...

  9. nginx限制访问速度

    转自:http://siwei.me/blog/posts/nginx-ip 参考:http://tengine.taobao.org/document_cn/http_limit_req_cn.ht ...

  10. MVC+EF 自定义唯一性验证

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    本篇提供二种方法,希望大家喜欢 1.自定义验证属性 ...