对象Object
<h3>对象(Object)</h3>
<p>1、<a target='_blank' href='https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign'>Object.assign(target,obj1,obj2,...)</a>:通过复制一个或多个对象来创建一个新的对象到目标对象。它将返回目标对象。</p>
<pre><code>const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);
console.log(target);//{ a: 1, b: 4, c: 5 }
// expected output: Object { a: 1, b: 4, c: 5 }
console.log(returnedTarget);//{ a: 1, b: 4, c: 5 }
// expected output: Object { a: 1, b: 4, c: 5 }</code></pre>
<p>2、<a target='_blank' href='https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/create'>Object.create(obj)</a>:使用指定的原型对象和属性创建一个新对象。</p>
<pre><code>const person = {
isHuman:true,
canSpeak(){
console.log('hello')
},
hands:2,
head:1,
fingers:10
}
const me = Object.create(person)
console.log(me.isHuman)//true
me.canSpeak()//hello</code></pre>
<p>3、<a target='_blank' href=''>Object.defineProperty(obj,prop,descriptor)</a>:给对象添加一个属性并指定该属性的配置。
<a target='_blank' href=''>Object.defineProperties(obj,propsObj)</a>:给对象添加多个属性并分别指定它们的配置。</p>
<pre><code>const person = {
isHuman:true,
canSpeak(){
console.log('hello')
},
hands:2,
head:1,
fingers:10
}
//添加、修改一个属性
Object.defineProperty(person,'birthday',{
value:'2020-12-12',
writable:false
}
)
//添加、修改多个属性
Object.defineProperties(person,{
sex:{
value:'female',
writable:false
},
age:{
value:18,
writable:true
},
active:{
value:function active(v){
console.log(`i can ${v}`)
},
writable:false
}
})
person.sex = 'male' // 不可修改
person.age = 100 // 可以修改
console.log(person)//{isHuman:true,sex:'female',age:100,canSpeak()}
person.active('run') // i can run</code></pre>
<p>4、<a target='_blank' href=''>Object.entries(obj)</a>:返回一个给定对象自身可枚举属性的键值对数组
<a>Object.fromEntries(arr)</a>:从可迭代的[key, value]对中返回一个新对象。(<strong>Object.entries()的反向</strong>)</p>
<pre><code>const person = {
isHuman:true,
canSpeak(){
console.log('hello')
},
hands:2,
head:1,
fingers:10
}
const propsArr = Object.entries(person)
console.log(propsArr)//[['isHuman',true],['canSpeak',function canSpeak()],['hands',2]...]</code></pre>
<p>5、<a>Object.freeze()</a>:冻结对象,不能删除或修改任何属性</p>
<pre><code>const person = {
isHuman:true,
canSpeak(){
console.log('hello')
},
hands:2,
head:1,
fingers:10
}
console.log(person.isHuman)//true
Object.freeze(person)
person.isHuman = false
console.log(person.isHuman)//true</code></pre>
<p>6、<a>Object.is()</a>:判断两个对象是否相同</p>
<pre><code>console.log(`'','':${Object.is('','')}`)//true
console.log(`0,'0':${Object.is(0,'0')}`)//false
console.log(`null,null:${Object.is(null,null)}`)//true
console.log(`NaN,NaN:${Object.is(NaN,NaN)}`)//true
console.log(`undefined,undefined:${Object.is(undefined,undefined)}`)//true
const arr1 = [1]
const arr2 = [1]
console.log(`arr1,arr1:${Object.is(arr1,arr1)}`)//true
console.log(`arr1,arr2:${Object.is(arr1,arr2)}`)//false
console.log(`[1],[1]:${Object.is([1],[1])}`)//false
console.log(`[],[]:${Object.is([],[])}`)//false
const obj1 = {a:1}
const obj2 = {a:1}
console.log(`obj1,obj1:${Object.is(obj1,obj1)}`)//true
console.log(`obj1,obj2:${Object.is(obj1,obj2)}`)//false
console.log(`{a:1},{a:1}:${Object.is({a:1},{a:1})}`)//false
console.log(`{},{}:${Object.is({},{})}`)//false
console.log(`0,-0:${Object.is(0,-0)}`)//false
console.log(`-0,-0:${Object.is(-0,-0)}`)//true
console.log(`NaN,0/0:${Object.is(NaN,0/0)}`)//true
console.log(`Infinity,1/0:${Object.is(Infinity,1/0)}`)//true</code></pre>
<p>7、<a>Object.isExtensible(obj)</a>:判断对象是否可扩展
8、<a>Object.isSealed(obj)</a>:判断对象是否已密封
9、<a>Object.keys(obj)</a>:返回对象的属性数组,不包含defineProperty定义的属性
10、<a>Object.isFrozen(obj)</a>:判断对象是否被冻结
11、<a>Object.getOwnPropertyDescriptor(obj,prop)</a>:返回对象的命名属性的属性描述符。
12、<a>Object.getOwnPropertyDescriptors(obj)</a>:返回一个包含对象自身所有属性描述符的对象。
13、<a>Object.getOwnPropertyNames(obj)</a>:返回一个包含对象自身所有属性描述符的对象,包含defineProperty定义的属性。</p>