Legendary

李洋的学习笔记


对象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>:给对象添加一个属性并指定该属性的配置。 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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>

页面列表

ITEM_HTML