方法1:assign: 浅克隆
- 作用: 用于将一个对象中可遍历的属性复制到另一个目标对象中,返回目标对象
- 语法: var 新目标对象 = object.assign(原目标对象,被复制的对象)
方法2: creat:
- 作用: 创建对象
- 语法: Object.create(原型, 设置属性的对象) - 返回对象;
var o = Object.create(null);
console.log(o);
1.对象可以没有原型;
2.创建对象应该增加一个步骤 - 设置原型
new操作符到底干了什么?
1.在构造函数中创建了空对象
2.给他设置原型对象
3.将this指向他
4.执行构造函数代码
5.返回这个空对象
方法3: defineProperty
- 作用: 监视对象属性,当对象属性的值被修改时,可以监视到,访问对象属性的值的时候,可以监视到;
- 语法:
Object.defineProperty(对象, 属性名, {
get() {
}
var obj ={
name:"张三",
age:12
}
监视对象访问name属性:
Object.defineProperty(obj, 'name',{
get(){
console.log('访问了name属性');
},
set(val){
console.log('正在设置name属性的值,要修改成' + val);
}
}
三阶段: 双向数据绑定:
改变页面内容 - 对象的值就改变
对象的值改变了 - 页面内容改变
<input type="text">
var ipt = document.querySelector('input')
ipt.oninput = function() {
obj.msg = this.value
}
Object.defineProperty(obj, 'msg', {
get() {
return ipt.value
},
set(val) {
ipt.value = val
}
})
方法4: entries:
- 作用: 将对象中可遍历的键值对组成map格式的一个数组;
- 语法: Object.entries(对象)
- 返回值: 返回新的数组
方法5: fromEntries:
- 作用: 将键值对组成的数组转成对象=>相当与把Map转化成对象;
- 语法: Object.fromEntries(数组)
- 返回值: 返回一个对象;
var arr = [['name', '张三'], ['age', 12], ['sex', '男']];
返回值:
var arr= {
name: "张三",
age:18,
sex:男
}
方法6: freeze:
- 作用: 将一个对象冻结;让对象不能新增,不能删除,不用修改原型,不能改属性的特性
- 语法: var 对象 = Object.freeze(对象)
- 返回值: 返回被冻结的对象;
默认可添加、可删除、修改原型
将obj冻结 - 不可以添加、删除、修改原型
方法7: isFrozen:
- 作用: 判断对象是否被冻结
- 语法: Object.isFrozen(对象)
- 返回值: 返回一个布尔值;
Object.freeze(obj)
console.log( Object.isFrozen(obj) );
console.log( Object.isFrozen(obj) );
方法8: getOwnPropertyDescriptors:
- 作用: 获取对象属性的描述符;可以理解为获取它可遍历 可删除的那些属性
- 语法: Object.getOwnPropertyDescriptors(对象)
- 返回值: 返回描述符;
var descriptors = Object.getOwnPropertyDescriptors(obj);
console.log(descriptors);
方法9: getPrototypeOf:
- 作用: 获取对象原型的方法;
- 语法: Object.getPrototypeOf(对象)
- 返回值: 返回原型对象;
var obj ={
name:"张三"
}
console.log( Object.getPrototypeOf(obj) );
方法10: hasOwn
- 作用: 判断一个属性是否属于某个对象,而不是被继承来的,跟hasOwnProperty功能一样;
- 语法: Object.hasOwn(对象, 属性)
- 返回值: 返回布尔值
方法11: is
- 作用: 判断两个数据表面看起来是否相等
- 语法: Object.is(两个数据)
- 返回值: 表面相等时是true 表面不相等是false
console.log( +0 == -0 );
console.log( Object.is(+0, -0) );
console.log( NaN == NaN );
console.log( Object.is(NaN, NaN) );
方法12: preventExtensions
- 作用: 将一个对象变得不可扩展(添加属性)
- 语法: Object.preventExtension(对象) //此时这个对象就不可以添加属性了.
- 返回值: 没有扩展之前的原对象;
- 注意: 它只是不能加东西,可以删除 可以修改...
方法13: isExtensible:
- 作用: 判断一个对象是否可扩展
- 语法: Object.isExtensible(对象)
- 返回值: 返回布尔值
方法14: keys:
- 作用: 将对象所有键组成一个数组
- 语法: Object.keys(对象)
- 返回值: 返回新数组;
var obj = {
name: '张三',
age: 12,
isMan: true
}
var arr = Object.keys(obj)
console.log(arr);
方法15: values
- 作用: 将对象中所有的值组成一个数组
- 语法: Object.values(对象)
- 返回值: 返回值组成的数组
var obj = {
name: '张三',
age: 12,
isMan: true
}
var obj = Object.values(obj);
console.log(obj);
方法16: setPrototypeOf:
- 作用: 给对象设置原型
- 语法: Object.setPrototypeOf(对象, 原型)
- 返回值: 设置后的原型
方法17: seal:
- 作用: 封闭一个对象(不能添加、删除,但能修改)
- 语法: Object.seal(对象)
- **返回值: **
- 冻结freeze 和封闭seal的区别:
- 封闭不能添加属性 不能删除属性 但可以修改属性;
- 冻结不可以添加,不可以删除 不可以修改
var obj = {
name: '张三'
}
Object.seal(obj)
obj.age = 12
delete obj.name
obj.name = '李四'
console.log(obj);