JS对象属性writable、enumerable、configurable
输出是什么?
const person = { name: "Lydia" };Object.defineProperty(person, "age", { value: 21 });console.log(person);
console.log(Object.keys(person));
A: { name: “Lydia”, age: 21 }, [“name”, “age”]
B: { name: “Lydia”, age: 21 }, [“name”]
C: { name: “Lydia”}, [“name”, “age”]
D: { name: “Lydia”}, [“age”]
答案: B
通过defineProperty方法,我们可以给对象添加一个新属性,或者修改已经存在的属性。而我们使用defineProperty方法给对象添加了一个属性之后,属性默认为 不可枚举(not enumerable). Object.keys方法仅返回对象中 可枚举(enumerable) 的属性,因此只剩下了"name".
用defineProperty方法添加的属性默认不可变。你可以通过writable, configurable 和 enumerable属性来改变这一行为。这样的话, 相比于自己添加的属性,defineProperty方法添加的属性有了更多的控制权。
普通的对象属性对应的属性描述符含有:writable(可写)、enumerable(可枚举)和configurable(可配置)。
1.在使用Object.defineProperty()、Object.defineProperties() 或 Object.create() 函数的情况下添加数据属性,writable、enumerable和configurable默认值为false。
2.使用对象直接量创建的属性,writable、enumerable和configurable特性默认为true。
writable
writable属性是一个布尔值,决定了目标属性的值(value)是否可以被改变。如果原型对象的某个属性的writable为false,那么子对象将无法自定义这个属性。
enumerable
enumerable(可遍历性)返回一个布尔值,表示目标属性在 for…in、Object.keys、JSON.stringify 中是否可遍历。但是可以直接获取它的值。
注意,for…in循环包括继承的属性,Object.keys方法不包括继承的属性。如果需要获取对象自身的所有属性,不管是否可遍历,可以使用Object.getOwnPropertyNames方法。
configurable
configurable(可配置性)返回一个布尔值,决定了是否可以修改属性描述对象。
也就是说,configurable为false时,value、writable、enumerable和configurable都不能被修改了, configurable修改成false是单向操作,无法撤销!以及无法被删除
注意,writable只有在false改为true会报错,true改为false是允许的。
至于value,只要writable和configurable有一个为true,就允许改动。
另外,configurable为false时,直接目标属性赋值,不报错,但不会成功。
JS对象属性writable、enumerable、configurable相关推荐
- php json 遍历 keys,详解javascript遍历json对象的key和任意js对象属性的示例代码(图)...
下面小编就为大家带来一篇javascript遍历json对象的key和任意js对象属性实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 使用 keys 方法获取该对象 ...
- JS 对象属性的两种表示方法
JS中对象属性的表示方法有两种: <prop为属性名> obj.prop obj['prop'](注:'[]'里面必须是字符串) 例: var obj = {name:'abc' } ob ...
- JavaScript对象详解,js对象属性的添加
目录 一,什么是对象? 二,创建一个对象 三,对象的嵌套 四,对象的属性与修改 1,使用点.运算符 2,使用[]符号 3,修改属性 五,给对象添加属性 六,查看与删除对象的属性 1,使用Object. ...
- 深入 JS 对象属性
译者:前端小智作者:Dr.Axe l来源:2ality 阿里云最近在做活动,低至2折,有兴趣可以看看: https://promotion.aliyun.com/ntms/yunparter/invi ...
- html下拉框属性js,Html下拉框Js对象属性方法总结
var obj = document.getElementById("selectId"); 一 select属性: length ----------> 顾名思义字指的是下 ...
- js 对象属性过滤方法
数组使用fliter 函数是可以过滤掉的,但是对象的属性怎么过滤呢? 剔除少数属性,要多数属性 有时候需要剔除少数属性,留下大多数.类似于TS的omit 例子: let person = {name: ...
- react,删除js对象属性
const { data, setData } = useState()const XXX = ( id ) => {request({url: 'XXX',method: 'post',dat ...
- js for in遍历对象_JS中轻松遍历对象属性的几种方式
自身可枚举属性 Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 .如果对象的键-值都 ...
- [转] js对象监听实现
前言 随着前端交互复杂度的提升,各类框架如angular,react,vue等也层出不穷,这些框架一个比较重要的技术点就是数据绑定.数据的监听有较多的实现方案,本文将粗略的描述一番,并对其中一个兼容性 ...
最新文章
- 厉害了,史上最 “污” 技术解读。。
- “蜥蜴之尾”——长老木马四代分析报告
- RabbitMQ管理(5)——集群管理
- 服务器系统gho系统怎么安装系统,GHOST怎么重装系统?GHO文件安装系统教程
- 【Baltic2003】【BZOJ1370】Gang团伙(并查集,拆点)
- 定时器开始时延时了十几秒_第六章--系统滴答定时器
- CISCO技术(1.7万)
- 【渝粤题库】陕西师范大学200081中国古代文学(一)作业(高起本、高起专)
- 【Grafana】通过阿里云日志服务监控Nginx访问日志显示统计信息
- 2012server改计算机用户名,windows server 2012 r2管理员用户名怎么修改
- mysql数据库如何查看表空间_MYSQL:查看的数据库表空间
- Nuxt.js 如何做SEO优化
- 书单 | 测试工程师必读经典好书,你读过几本?
- 建立个人的腾讯云服务器
- HTML5 移动页面自适应手机屏幕四种方法(禁止html5手机端双击页面放大的问题)
- 计算机科学与技术专业考研方向
- h5调用指纹识别_基于HTML Canvas实现“指纹识别”技术,canvas指纹
- TiDB at ZaloPay Infrastructure Lesson Learned
- 回归算法-线性回归分析-过拟合欠拟合岭回归
- 全球地名中英文对照表(B)
热门文章
- 分享一下嵌入式 HarmonyOS 的学习思路
- nodejs是单线程还是多线程_node是多线程还是单线程?
- 巨蟹座适合学计算机嘛,几号出生的巨蟹座最厉害 最聪明 命好
- kesci---2019大数据挑战赛预选赛---情感分析
- kali 安装php7.3-fpm或者其他版本的php
- Go map的底层原理(存储、扩容)
- RocketMQ学习笔记
- Word 邮件合并功能(Excel表中指定列数据插入到Word模板指定位置,批量生成Word)
- css发动机的机滤,别傻了!网传的机油滤清器加磁铁真的能起到发动机保护作用?...
- solidworks安装出错,Error 1935.安装程序集出错