【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博客

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

相关推荐
谢尔登6 分钟前
【React】React 18 并发特性
前端·react.js·前端框架
Joker`s smile9 分钟前
使用React+ant Table 实现 表格无限循环滚动播放
前端·javascript·react.js
国家不保护废物14 分钟前
🌟 React 魔法学院入学指南:从零构建你的第一个魔法阵(项目)!
前端·react.js·架构
import_random17 分钟前
[机器学习]svm支持向量机(优势在哪里)
前端
国家不保护废物18 分钟前
从刀耕火种到现代框架:DOM编程 vs Vue/React 进化史
前端·vue.js·react.js
陈随易18 分钟前
Univer v0.8.0 发布,开源免费版 Google Sheets
前端·后端·程序员
sduwcgg20 分钟前
python的numpy的MKL加速
开发语言·python·numpy
不怎么爱学习的dan23 分钟前
实现 ECharts 多国地区可视化方案
前端
嘉小华24 分钟前
Android Lifecycle 状态同步与分发机制深度解析
前端
钢铁男儿29 分钟前
Python 接口:从协议到抽象基 类(定义并使用一个抽象基类)
开发语言·python