JavaScript 中对象的属性类型
对象的属性类型
JavaScript 中的对象的属性包括数据属性和访问器属性,在 JavaScript 引擎的内部实现中定义了用于描述属性(property)的特性(attribute)。规范中将特性放在了两对方括号中以此表示它们是内部值,在 JavaScript 中不能直接访问这些特性。
数据属性
数据属性的特性包括:
[[Configurable]]
:表示能否通过delete
删除属性从而重新定义属性;能否修改属性的特性;或能否把属性修改为访问器属性。默认值为true
。[[Enumerable]]
:表示能否通过for-in
循环返回属性。默认值为true
。[[Writable]]
:表示能够修改属性的值。默认值为true
。[[Value]]
:包含这个属性的数据值。读取属性值的时候从这个位置读,写入属性值的时候把新值保存在这个位置。默认值为undefined
。
修改属性的特性
由于属性的特性不能直接访问,因此要修改属性的特性需要使用 Object.defineProperty()
方法。
var person = new Object();
Object.defineProperty(person, 'name', {configurable: false,writable: false,value: 'Nicholas'
});console.log(person.name); // Nicholas
person.name = 'Greg';
console.log(person.name); // Nicholas
delete person.name;
console.log(person.name); // Nicholas
在调用 Object.defineProperty()
方法时,如果不指定, [[Configurable]]
、 [[Enumerable]]
、 [[Writable]]
特性的默认值都为 false
。
注:严格模式下,对只读的属性进行赋值操作会导致抛出错误;对不可配置的属性调用 delete
也会导致错误。一旦将属性修改为不可配置后再调用 Object.defineProperty()
方法修改除 [[Writable]]
之外的特性都会导致错误。
访问器属性
访问器属性的特性包括:
[[Configurable]]
:表示能否通过delete
删除属性从而重新定义属性;能否修改属性的特性;或能否把属性修改为访问器属性。默认值为true
。[[Enumerable]]
:表示能否通过for-in
循环返回属性。默认值为true
。[[Get]]
:在读取属性时调用的函数 getter。默认值为undefined
。[[Set]]
:在写入属性时调用的函数 setter。默认值为undefined
。
访问器属性不能直接定义,必须使用 Object.defineProperty()
来定义。
var book = {_year: 2017,edition: 1
};Object.defineProperty(book, 'year', {get: function () {return this._year;},set: function (newValue) {if (newValue > this.year) {this.edition += newValue - this.year;this._year = newValue;}}
})book.year = 2020;
book.year = 2023;
console.log(book.edition + ', ' + book.year); // 7, 2023
在读取访问器属性时,会调用 getter 函数,这个函数负责返回有效的值;在写入访问器属性时会调用 setter 函数并传入新值作为参数。
注:不如果只为访问器属性指定 getter 或 setter 函数,意味着该访问器属性是只读或只写的。
同时定义多个属性
使用 Object.defineProperties()
方法可以通过描述符一次定义多个属性。
var book = {};Object.defineProperties(book, {_year: {writable: true,value: 2017},edition: {writable: true,value: 1},year: {get: function () {return this._year;},set: function (newValue) {if (newValue > this.year) {this.edition += newValue - this.year;this._year = newValue;}}}
});book.year = 2020;
book.year = 2023;
console.log(book.edition + ', ' + book.year); // 7, 2023
转载于:https://www.cnblogs.com/rickkky/p/7496922.html
JavaScript 中对象的属性类型相关推荐
- 删除javaScript中对象的属性
删除javaScript中对象的属性 语法 delete 对象.属性;
- 细说JavaScript中对象的属性和方法
最近在回家的路上读了尼古拉斯的新书<JavaScript面向对象精要>,发现自己对对象的属性和方法不是很熟悉,特别是es5新增的部分,特写此文总结一下,同时也与大家共勉. 本文分为两部分, ...
- JS中对象按属性排序(冒泡排序)
原文地址 https://www.cnblogs.com/it-Ren/p/10898947.html 一路向北√ 越努力,越幸运. JS中对象按属性排序(冒泡排序) 冒泡排序:它重复地走访过要排序的 ...
- C#保留2位小数几种场景总结 游标遍历所有数据库循环执行修改数据库的sql命令 原生js轮盘抽奖实例分析(幸运大转盘抽奖) javascript中的typeof和类型判断...
C#保留2位小数几种场景总结 场景1: C#保留2位小数,.ToString("f2")确实可以,但是如果这个数字本来就小数点后面三位比如1.253,那么转化之后就会变成1.25. ...
- 递归——函数在内部自己调用自己,那么该函数是递归函数 作用和循环效果一样 要加推出条件return,否则发生栈溢出,导致死循环 递归给数组中对象添加属性 toString()和随机数
递归--函数在内部自己调用自己,那么该函数是递归函数 & 作用和循环效果一样 & 要加推出条件return,否则发生栈溢出,导致死循环 & 递归给数组中对象添加属性 & ...
- php中常见的错误类型有,JavaScript中常见的错误类型有哪些?(详细介绍)
在JavaScript中,当发生错误时会生成描述错误类型的错误对象,此错误对象包含错误类型和编号等信息,这些信息可用于后续处理等,在本篇文章中将给大家介绍常见的错误类型以及如何处理这些错误. Java ...
- JavaScript中的六种错误类型
刚入前端坑,英语又不太好的同学,是不是还在为控制台的错误抓耳挠腮?今天就带大家看一看JavaScript中常见的错误类型. js中的控制台的报错信息主要分为两大类,第一类是语法错误,这一类错误在预解析 ...
- JavaScript中对象(Object)的方法
JavaScript中对象方法总结: 资料来源:网道-互联网开发文档 [https://wangdoc.com/] 1.Object.getPrototypeOf(Object) Object.get ...
- javascript中对象_了解JavaScript中的承诺
javascript中对象 我向您承诺,到本文结束时,您将更好地了解JavaScript. 我与JavaScript有一种"爱与恨"的关系. 但是尽管如此,JavaScript一直 ...
最新文章
- Squid处理web数据请求
- java sleep方法_百战程序员:java线程的休眠和回复
- [jQuery]点击某元素之外触发事件
- 我是一名普通程序员,通过自己的努力,我的收入涨了3倍!
- Kafka解析之topic创建(3)——合法性验证
- 网络分流器|运营商光纤延距解决方案
- php 弹窗代码大全,PHP_asp.net弹出窗口代码大全,//关闭,父窗口弹出对话框,子窗 - phpStudy...
- java演练 循环嵌套 菱形图案的打印 四个阶段完成输出
- python删除数据库_用Python删除Cosmos数据库文档
- python的except之后还运行吗_python except异常处理之后不退出,如何解决异常继续执行...
- Hive常见的存储格式文件比较
- requests session
- linux集群中mpi的并行计算环境简单配置,linux集群中MPI的并行计算环境简单配置...
- 【无标题】曲线坐标张量分析
- InfofoIE浏览器的好助手(转)
- 如何拥有类似 hi@hahah.fun 的个人专属域名的邮箱
- 一款快速搭建局域网http服务器的神器
- 学习笔记:强化学习之A3C代码详解
- ORVIBO 精灵款升级分析
- 从业多年,谈谈差分输入电路和共模信号,差模信号关系的理解