【ECMAScript】Object对象的属性和方法梳理和总结(第八篇)

1. 前言

本篇梳理Object静态方法和Object的原型对象方法。

2. Object的静态属性

|------------|-----------------------|------------------------|
| Object静态属性 | 说明 | 示例 |
| prototype | 构造函数对象Object的原型属性 | Object.prototype |
| length | 构造函数对象Object的length属性 | Object.length 得到1 |
| name | 构造函数对象Object的name属性 | Object.name 得到'Object' |

3. Object的静态方法

|-----------------------------------------------------|------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Object静态方法 | 说明 | 示例 |
| Object.assign(target, src1, src2, ...) | 功能:将一个或多个源对象的可枚举自有属性复制目标对象(浅拷贝,仅复制属性值),并返回目标对象的引用 输入:Object, Object, .... 输出:Object-目标对象的引用 | const obj = {a:1}; Object.assign(obj, {b:3,c:2}, {c:3}) obj变成{a:1,b:3,c:3} |
| Object.create(prototype, descriptors?) | 功能:以现有对象为原型,创建一个新对象 输入:Object, 多个属性描述符对象 输出:Object | const obj = {a:1}; const obj2 = Object.create(obj) obj2.a 得到1 |
| Object.defineProperty(target, property, descriptor) | 功能:在目标对象target定义新属性或修改现有属性,并返回目标对象的引用 输入:Object, any, 属性描述符对象 输出:Object-目标对象的引用 | const obj = {a:1}; Object.defineProperty( obj, 'a', { value: 2, writable: false, }) |
| Object.defineProperties(target, descriptors) | 功能:在目标对象target定义多个新属性或修改现有多个属性,并返回目标对象的引用 输入:Object, any, 多个属性描述符对象 输出:Object-目标对象的引用 | const obj = {a:1}; Object.defineProperties( obj, { a: { value: 2, writable: false, }, b: { value:3 } }) |
| Object.getOwnPropertyDescriptor(target, property) | 功能:返回目标对象的指定自有属性的属性描述符 输入:Object, any 输出:descriptor-属性描述符对象 | undefined | const obj = {a:1}; Object.getOwnPropertyDescriptor( obj, 'a'); 得到 {value:1,writable:true, enumerable:true,configurable:true} |
| Object.getOwnPropertyDescriptors(target) | 功能:返回目标对象所有自有属性的属性描述符 输t入:Object 输出:descriptors-多个属性描述符对象 | { } | const obj = {a:1,b:2}; Object.getOwnPropertyDescriptors( obj); 得到 { a: { value:1,writable:true, enumerable:true,configurable:true }, b: { value: 2.writable:true, enumerable:true,configurable:true } } |
| Object.getOwnPropertyNames(target) | 功能:返回目标对象所有自有属性的属性键数组(含不可枚举,不含symbol值作为属性键) 输入:Object 输出:Array<any> | const obj = {a:1,b:2}; Object.getOwnPropertyNames( obj) 得到['a','b'] |
| Object.getOwnPropertySymbols(target) | 功能:返回目标对象所有自有且symbol作为属性键的属性键数组 输入:Object 输出:Array<symbol> | const obj = {a:1,[Symbol.for('b')]:2}; Object.getOwnPropertySymbols( obj) 得到[ Symbol(b) ] |
| Object.hasOwn(target, property) | 功能:判断指定属性property是否为目标对象target自有属性,旨在取代Object.prototype.hasOwnProperty 输入:Object, any 输出:boolean(即true | false) | const obj = {a: 1} Object.hasOwn(obj, a) 得到true |
| Object.keys(target) | 功能:返回目标对象可枚举自有属性的属性键数组(字符串属性键) 输入:Object 输出:Array<string> | const obj = {a:1,b:2}; Object.keys(obj) 得到['a','b'] |
| Object.values(target) | 功能:返回目标对象可枚举自有属性的属性值数组(字符串属性键) 输入:Object 输出:Array<string> | const obj = {a:1,b:2}; Object.values(obj) 得到[1,2] |
| Object.entries(target) | 功能:返回目标对象可枚举自有属性的键值对数组(字符串属性键) 输入:Object 输出:Array<any> | const obj = {a:1,b:2}; Object.entries(obj) 得到[['a', 1],['b', 2]] |
| Object.fromEntries | 功能:将键值对列表转换成一个对象 输入:可迭代对象 输出:Object | Object.fromEntries([ ['a', 1], ['b', 2] ]) 得到{a:1,b:2} |
| Object.getPrototypeOf(target) | 功能:返回指定对象的原型 输入:Object 输出:Object-原型对象 | Object.getPrototypeOf({}) === Object.prototype 得到true |
| Object.setPrototypeOf(target, prototype) | 功能:更改目标对象的原型对象__proto__指向 输入:Object, Object-原型对象 输出:Object-目标对象引用 | <略> |
| Object.freeze(target) | 功能:冻结一个对象,被冻结对象就不能更改,返回目标对象的引用 输入:Object 输出:Object-输入对象的引用 | const obj = { a: 1 } Object.freeze(obj) delete obj.a 无法删除obj中的a |
| Object.isFrozen(target) | 功能:判断目标对象是否已经被冻结 输入:Object 输出:boolean(即true | false) | const obj = { a: 1 } Object.freeze(obj) Object.isFrozen(obj) 得到true |
| Object.seal(target) | 功能:密封一个对象,功能比freeze弱,可更改现有属性的值 输入:Object 输出:Object-输入对象的引用 | const obj = { a: 1 } Object.seal(obj) obj.a=2 // 可以更改obj中a的值 delete obj.a // 无法删除obj中的a |
| Object.isSealed(target) | 功能:判断目标对象是否已经被密封 输入:Object 输出:boolean(即true | false) | const obj = { a: 1 } Object.seal(obj) Object.isSealed(obj) 得到true |
| Object.preventExtensions(target) | 功能:阻止一个对象被扩展(添加新属性),以及防止对象的原型被重新指定,功能比seal和freeze还弱, 输入:Object 输出:Object-输入对象的引用 | const obj = { a: 1 } Object.preventExtensions( obj) obj.b = 1; // 添加的b属性不生效 |
| Object.isExtensible(target) | 功能:判断目标对象是否可扩展(是否可添加新属性) 输入:Object 输出:boolean(即true | false) | const obj = { a: 1 } Object.preventExtensions( obj) Object.isExtensible(obj) 得到false |
| Object.is(val1, val2) | 功能:确认两个值是否为相同值 输入:any, any 输出:boolean(即true | false) | 都是undefined 都是null 都是true或都是false 长度顺序字符相同的字符串 引用内存中同一个对象 相同数值的BigInt类型数值 引用相同Symbol值 都是数字 都是+0 都是-0 都NaN 相同值(非0,非NaN) 注:Object.is与===差异已标红 |
| Object.groupBy(items, callbackFn) | <略> | <略> |

4. 属性描述符

JavaScript中,一个属性是由字符串值的名称或一个Symbol 和一个属性描述符组成,一个属性描述符合有以下一些特性。

  • value - 与属性关联的值(限定为数据描述符)
  • writable - 仅当与属性关联的值可更改时,设置为true(限定为数据描述符)
  • get - 作为属性getter的函数,如果没有getter,则为undefined(限定为访问器描述符)
  • set - 作为属性为setter的函数,如果没有setter,则为决defined(限定为访问器描述符)
  • configurable - 仅当此属性描述符的类型可以更改且可以删除时,设置为true
  • enumerable - 仅当此属性在相应对象的属性枚举中出,设置为true
5. Object原型对象的方法

|--------------------------------------------------|--------------------------------------------------------------------------------|---------------------------------------------------------------------------------------|
| Object原型对象的方法 | 说明 | 示例 |
| Object.prototype.hasOwnProperty(property) | 功能:判断指定属性property是否是自有属性 输入:any 输出:boolean(即true | false) | const obj = { a: 1 }; obj.hasOwnProperty('a') 得到true |
| Object.prototype.isPrototypeOf(target) | 功能:检测一个对象是否是目标对象target的原型或存在于目标对象的原型链某个节点 输入:Object 输出:boolean(即true | false) | const obj = { a: 1 }; const obj1 = Object.create(obj); obj.isPrototypeOf(obj1) 得到true |
| Object.prototype.propertyIsEnumerable( property) | 功能:指定属性property是否是对象的可枚举自有属性 输入:any 输出:boolean(即true | false) | const obj = { a: 1 }; obj.propertyIsEnumerable(a) 得到true |
| Object.prototype.toLocaleString() | 功能:返回一个表示对象的字符串,派生对象会重写此方法 输入:无 输出:string | <略> |
| Object.prototype.toString() | 功能:返回一个表示对象的字符串,派生对象会重写此方法 输入:无 输出:string | const obj = { a: 1 }; obj.toString(); 返回'[object Object]' |
| Object.prototype.valueOf() | 功能:将this值转换成对象,将对象转换成基本类型值,派生对象会重写此方法 输入:无 输出:any | const obj = { a: 1 }; obj.valueOf() === obj 得到true |

6. Object原型对象的属性

|------------------------------|----------------------------------------------------|------------------------------|
| Object原型对象的属性 | 说明 | 示例 |
| Object.prototype.constructor | Object原型对象Object.prototype,它的construcotr属性指向Object | Object.prototype.constructor |

下一篇:【ECMAScript】Function对象的属性和方法梳理和总结(第九篇)-CSDN博客

注:以上,如有不合理之处,还请帮忙指出,大家一起交流学习~

相关推荐
前端小小王29 分钟前
React Hooks
前端·javascript·react.js
迷途小码农零零发39 分钟前
react中使用ResizeObserver来观察元素的size变化
前端·javascript·react.js
晓纪同学1 小时前
QT-简单视觉框架代码
开发语言·qt
威桑1 小时前
Qt SizePolicy详解:minimum 与 minimumExpanding 的区别
开发语言·qt·扩张策略
飞飞-躺着更舒服1 小时前
【QT】实现电子飞行显示器(简易版)
开发语言·qt
明月看潮生1 小时前
青少年编程与数学 02-004 Go语言Web编程 16课题、并发编程
开发语言·青少年编程·并发编程·编程与数学·goweb
娃哈哈哈哈呀1 小时前
vue中的css深度选择器v-deep 配合!important
前端·css·vue.js
明月看潮生1 小时前
青少年编程与数学 02-004 Go语言Web编程 17课题、静态文件
开发语言·青少年编程·编程与数学·goweb
Java Fans1 小时前
C# 中串口读取问题及解决方案
开发语言·c#
盛派网络小助手1 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#