【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博客
注:以上,如有不合理之处,还请帮忙指出,大家一起交流学习~
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!