Object常用方法

目录

一. 创建对象

1.Object.create(obj)

二. 读写原型 

1.Object.setPrototypeOf() 

 2.Object.getPrototypeOf()

 三. 访问属性

1.Object.getOwnPropertyNames(obj)

2.Object.prototype.hasOwnProperty()

3.in 运算符和 for...in 循环

4.Object.keys(obj)

四. 合并对象Object.assign()

1. 基本用法

2. 注意点


一. 创建对象

1.Object.create(obj)
  • 以obj为原型,生成一个对象实例,该实例继承了obj的所有属性和方法
  • 使用Object.create()方法时,必须提供对象原型,即参数不能为空,或者不是对象,否则会报错
  • Object.create()方法还可以接受第二个参数。该参数是一个属性描述对象,它所描述的对象属性,会添加到实例对象,作为该对象自身的属性

二. 读写原型 

1.Object.setPrototypeOf() 
Object.setPrototypeOf(obj,proto)
// 第一个参数是目标对象
// 第二个参数是原型
  • 如果第一个参数不是对象,会自动转为对象。但由于返回的是第一个参数,所以这个操作不会产生任何效果
  • 由于undefined和null无法转为对象,所以如果第一个参数是undefined或null,就会报错
 2.Object.getPrototypeOf()

用于读取对象的原型对象,如果参数不是对象,会被自动转为对象,undefined或null会报错

Object.getPrototypeOf(obj);

 三. 访问属性

1.Object.getOwnPropertyNames(obj)

方法返回一个数组,成员是参数对象本身的所有属性的键名,不包含继承的属性的键名。

2.Object.prototype.hasOwnProperty()

对象实例的hasOwnProperty方法返回一个布尔值, 用于判断某个属性是否定义在该对象自身。

Date.hasOwnProperty('length') //true
Date.hasOwnProperty('toString') //false
3.in 运算符和 for...in 循环

in运算符会返回一个布尔值,表示一个对象是否具有某个属性,包含自身和继承的可枚举属性 

'length' in Date //true
'toString' in Date //true

for...in获得对象的所有可枚举属性(自身和继承的)

let o1 = {p1:'123'};
let o2 = Object.create(o1,{p2:{value:'abc',enumerable:true}});

for(let p in o2){
    console.log(p)
}
//p2
//p1
4.Object.keys(obj)

方法返回一个数组,成员是参数对象自身的所有可遍历属性键名

let obj = {foo:'123',bar:'abc'};
Object.keys(obj);
//['foo','bar']

Object.values(obj)返回数组,包含对象自身的所有可遍历属性的键值

Object.entries(obj)返回数组,包含对象自身的所有可遍历属性的键值对数组

 

四. 合并对象Object.assign()

1. 基本用法
Object.assign(target,source1,source2);
//将源对象(source)的所有可枚举属性,复制到目标对象(target)
//Object.assign()的第一个参数是目标对象,后面的参数都是源对象
//如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性
let obj = {foo:'bar'}
Object.assign(obj) === obj; //true
//如果只有一个参数,会直接返回该参数
typeof Object.assign(2); // "object"
//如果参数不是对象,会先转成对象然后返回

Object.assign(undefined) // 报错
Object.assign(null) // 报错
//udefined和null无法转成对象,所以作为参数时,会报错
let obj = {a: 1};
Object.assign(obj, undefined) === obj // true
Object.assign(obj, null) === obj // true

//非对象参数出现在源对象的位置,若无法转成对象,则被忽略
//简单类型的值(数值、字符串、布尔值),不在首参数也不会报错,
//但只有字符串会以数组形式拷贝入目标对象,其他值不会有效果
2. 注意点

浅拷贝:源对象的某个属性的值是对象,则目标对象拷贝的是这个对象的引用

取值函数的处理:如果要复制的值是一个取值函数,那么将会求值后再复制 

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值