一.静态属性方法
1.创建对象
new Object()
create(原型对象, 属性描述对象) 创建新对象
示例: Object.create({a: 1},
{b: {value: 2,writable: true, enumerable: true }});
2.定义/修改属性
defineProperty(对象, 属性名, 属性描述) 定义单个属性
示例: Object.defineProperty(obj, "aa",{
value:2, writable:true, enumerable:false, configurable:true}) :设置对象属性特性
definePropertys(对象, 属性描述对象) 定义多个属性
示例: Object.definePropertys(obj, {
x: { value: 2 },
y: { get: function(){return 1;}, set:undefined, enumerable:false, configurable: true }
})
3.枚举属性
keys(对象) 返回对象自身可枚举属性名的数组
values(对象) 返回对象自身可枚举属性值的数组
getOwnPropertyNames(对象) 返回对象所有的自身属性名称的数组
getOwnPropertySymbols(对象) 返回对象自身的Symbol属性的数组
4.查看属性
getOwnPropertyDescriptor(对象, 属性名) 返回对象自身属性描述
getOwnPropertyDescriptors(对象) 返回对象自身所有属性描述
5.属性扩展性
isExtensible(对象) 判断是否可扩展
preventExtensions(对象) 设为 不可扩展 = 不可新增 → (删改查)
isSealed(对象) 判断是否封闭
seal(对象) 设为 封闭 = 不可拓展 + 不可配置 → (改查)
isFrozen(对象) 判断是否冻结
freeze(对象) 设为冻结= 不可拓展 + 不可配置 + 不可写 → (查)
注: 空对象(无法删) + 不可拓展 = 封闭
冻结的对象的存取器setter方法依然有效
6.获取设置原型
getPrototypeOf(对象) 获取对象的原型
setPrototypeOf(对象, 新原型) 设置对象原型
注: 通过create,getOwnPropertyDescriptors,getPrototypeOf
3个方法可以实现对象全面浅拷贝
7.工具方法
assign(目标对象, 源对象1, 源对象2..) 将源对象的自身可枚举属性合并到目标对象/数组中(ES6新添)
entries(对象/数组/字符串) 分割对象,返回 [[key1/index0, value1], [],...]
is(值1, 值2) 比较两个值是否严格相等,类似===,不同之处如下
Object.is(+0, -0) → false, Object.is(NaN, NaN) → true
Object.prototype.toString.call(对象) 获取对象的类型名/构造函数名(间接使用Function.prototype的call方法)
二.对象属性方法(继承自Object.prototype,都是不可枚举的)
1.检测属性
hasOwnProperty(属性名) 检测对象自身属性是否存在
propertyIsEnumerable(属性名) 检测对象自身属性是否存在且是可枚举的
2.原型相关
isPrototypeOf(目标对象) 判断自身是否为目标对象的原型
__proto__ 原型属性,获取/设置原型对象 (不推荐使用,某些浏览器不兼容)
constructor 构造函数默认的原型对象里自带,(故Object.prototype才有,又被所有对象继承)
重设原型除非自己显式增加这个属性
3.转换
valueOf() 对象数值运算时隐式调用, 默认返回对象本身
toString() 对象字符串运算时隐式调用, 默认返回"[object object]", 除非重写此方法
toLocaleString() 默认执行toString(),好像只有Date重写了此方法
JS对象—3.系统函数(Object)
最新推荐文章于 2022-05-21 10:15:42 发布