JavaScript中对象的property有三个属性:

1.writable。该property是否可写。

2.enumerable。当使用for/in语句时,该property是否会被枚举。

3.configurable。该property的属性是否可以修改,property是否可以删除。

在ECMAScript 3标准中,上面三个属性的值均为true且不可改:新建对象的property是可写的、可被枚举的、可删除的;而在ECMAScript 5标准中,可通过property的描述对象(property descriptor)来对这些属性进行配置和修改。

如果将property的值信息也作为property的属性来看的话,对象中的property拥有四个属性:value、writable、enumerable和configurable。

对于用getter和setter方法来定义的property,由于其没有writable属性(property是否可写取决于setter方法是否存在),因此这种property也有四个属性:get、set、enumerable和configurable — get和set属性的值为function。

获取对象property的属性

ECMAScript 5标准中,可以通过Object.getOwnPropertyDescriptor()来获取对象自身某个property的属性信息:var o = {x:1};

var a = Object.create(o);

a.y = 3;

console.log(Object.getOwnPropertyDescriptor(a, "y"));//Object {configurable=true, enumerable=true, writable=true, value=3}

console.log(Object.getOwnPropertyDescriptor(a, "x"));//undefined

可以看到,如果property不存在或者property继承自原型对象,则返回undefined。

设置对象property的属性

ECMAScript 5标准中,可以通过Object.defineProperty()来设置对象自身某个property的属性:Object.defineProperty(a, "y", {

value:3,

writable:true,

enumerable:false,

configuration:true

});

console.log(a.propertyIsEnumerable("y"));//false

如果设置的property是从原型对象中继承而来的,那么JavaScript将在对象自身中创建一个同名的property,这与赋值操作的相关行为一致:Object.defineProperty(a, "x", {

value:1,

writable:true,

enumerable:false,

configuration:true

});

console.log(a.propertyIsEnumerable("x"));//false

console.log(o.propertyIsEnumerable("x"));//true

除了修改property的属性,还可以将property改为用getter或setter访问:Object.defineProperty(a, "y", {

get:function(){return 42;}

});

console.log(a.y);//42

在使用Object.defineProperty()时,property描述对象中的属性值可以部分忽略,当属性值有所忽略时,JavaScript中的处理规则如下:

如果property是新建的,则所有忽略的属性值均为false或undefined。

如果property已存在,则所有忽略的属性值维持原样不变。

批量设置对象property的属性

如果需要一次性设置多个property的属性,可以使用Object.defineProperties()语句。该语句将返回修改后的对象。Object.defineProperties(a, {

"y":{value:79, writable:true, enumerable:true, configurable:true},

"z":{value:99, writable:true, enumerable:true, configurable:true}

});

console.log(a);//Object {y=79, z=99}

property属性设置规则

当对property属性进行修改时,必须遵循以下规则。如果违反规则,JavaScript将报TypeError错误:

如果对象不是extensible的,则只能修改已有property的属性,无法添加新的property。

如果property的configurable属性为false,则无法修改configurable和enumerable属性的值,对于writable属性,可以将其从true改为false,但无法将其从false改为true。如果property由getter和setter定义,则getter和setter方法无法被修改。

如果property的configurable属性和writable属性均为false,则property值不可改。如果property的writable属性为false,但其configurable属性为true,则property值依然可以修改。

php property 获取,JavaScript中如何获取和设置property属性代码详解相关推荐

  1. Javascript中this指向丢失原因及解决办法详解

    大家都知道JS中的this关键字通常出现在函数或者方法中,用来指向调用该函数或者方法的对象.但是在很多时候this的指向却并不总是如我们所愿,这一篇文章就一起来看看到底该如何判断this所指向的对象, ...

  2. signature=b8cae5ae994df93c3fedf622c2a51ac5,javascript中的Base64、UTF8编码与解码详解

    Base64编码说明 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式. 如果剩下的字符不足3个字节,则用0填充 ...

  3. 教你用 JavaScript 设计一个 Neumorphism 风格的数字时钟 (代码详解)

    时钟是我们用来测量时间的装置.如果使用得当,时钟对于任何 UI 都是有用的元素.时钟可用于以时间为主要关注点的网站,例如一些预订网站或一些显示火车.公共汽车.航班等到达时间的应用程序.时钟基本上有两种 ...

  4. mysql datediff函数怎么用_SQL中datediff函数怎么用?(代码详解)

    在SQL Server中,可以使用T-SQL DATEDIFF()函数返回两个日期之间的差异.它适用于任何可以解析为time.date.smalldatetime.datetime.datetime2 ...

  5. 在PyTorch中进行双线性采样:原理和代码详解

    ↑ 点击蓝字 关注视学算法 作者丨土豆@知乎 来源丨https://zhuanlan.zhihu.com/p/257958558 编辑丨极市平台 在pytorch中的双线性采样(Bilinear Sa ...

  6. 一对一视频聊天系统中三种聊天方式的功能应用代码详解

    在一对一视频聊天系统中,聊天是必不可少的沟通方式,主播和用户可以根据多种方式进行聊天,其中视频聊天和语音聊天是最为广泛的应用方式,但文字聊天也是直播系统当中必不可少的功能模块. private Rec ...

  7. 深入理解NLP中LayerNorm的原理以及LN的代码详解

    想来大厂字节跳动的同学不要错过这次2024届的暑期实习招聘,「2023年4月30日」就截止了: ❤️ 粉丝专属内推码:JYT8RH3 ❤️

  8. java8 方法引用详解_Java8中如何通过方法引用获取属性名详解

    前言 在我们开发过程中常常有一个需求,就是要知道实体类中Getter方法对应的属性名称(Field Name),例如实体类属性到数据库字段的映射,我们常常是硬编码指定 属性名,这种硬编码有两个缺点. ...

  9. js 条码枪扫描_使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解

    下面通过实例代码给大家介绍js扫码枪扫描条形码的实现方法,具体代码如下所示: var keycode = ""; var lastTime=null,nextTime; var l ...

最新文章

  1. 皮一皮:到底谁才是渣王...
  2. Android异步下载网络图片(其一:Handler)
  3. php适用于什么服务器,php – 找不到laravel类(适用于localhost但不适用于DO服务器)...
  4. 用函数刷新页面内容比刷新页面要好
  5. 文档管理 linux,Linux 文档管理
  6. 云计算之路-阿里云上:4000IOPS的RDS+16核CPU的负载均衡
  7. “21天好习惯”第一期-14
  8. chainmaker-go-sdk get cert hash failed, get cert hash failed, send QUERY_SYSTEM_CONTRACT failed
  9. c# PropertyGrid 自定义属性排序
  10. 头歌(educoder)实训作业题目及答案分享 ——1-1 Java入门 - Java入门基础
  11. 黑苹果简单驱动 MultiBeast用法基础篇
  12. 分享 - 怎样实习才能成长最快
  13. 工作中,掌握这四个说话技巧,再也不用担心自己不会说话
  14. POI-获取Excel中合并单元格问题
  15. Java程序是怎么运行的?
  16. C-kermit使用
  17. html5的download下载标签
  18. 施一公直播首秀来了!解答读博困惑都说了啥?
  19. 通达OA精灵提示“库没有注册”无法登录处理方法
  20. 计算机网络考试多选题汇总Ⅰ(答案见文末)

热门文章

  1. matlab有趣表白程序_小人表白MATLAB代码
  2. 一年级下册数学计算机应用题,一年级数学下册期中检测试题
  3. 创建构建方法android,如何快速创建并发布一个 Android 库
  4. java编程基础码_1.java编程基础
  5. Codeforces Round #530 (Div. 2)
  6. C#中使用FFMPEG切割、合并视频。
  7. 算法47----大数
  8. 【IDE】我的花里胡哨VS
  9. 浮点数规格化-不同基数的规格化
  10. delphi中Record 和Packed Record的区别