属性简洁表示法
Object 的属性必须是 key-value 形式
let name = 'xiecheng'
let age = 34
let obj = {
name: name,
age: age,
study: function() {
console.log(this.name + '正在学习')
}
}
在 ES6 之后是可以用简写的形式来表达:
let name = 'xiecheng'
let age = 34
let obj = {
name,
age,
study() {
console.log(this.name + '正在学习')
}
}
Object.is()
判断两个对象是否相等。
let obj1 = { // new Object()
name: 'xiecheng',
age: 34
}
let obj2 = { // new Object()
name: 'xiecheng',
age: 34
}
console.log(obj1 == obj2) // false
console.log(Object.is(obj1, obj2)) // false
let obj2 = obj1
console.log(Object.is(obj1, obj2)) // true
Object.assign()用于对象的合并
Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,它将返回目标对象。
const target = {
a: 1,
b: 2
}
const source = {
b: 4,
c: 5
}
const returnedTarget = Object.assign(target, source)
console.log(target)
// expected output: Object { a: 1, b: 4, c: 5 }
console.log(returnedTarget)
// expected output: Object { a: 1, b: 4, c: 5 }
基本语法Object.assign(target, ...sources)
参数 含义 必选
target 目标对象 Y
sources 源对象 N
从语法上可以看出源对象的个数是不限制的(零个或多个),如果是零个直接返回目的对象,如果是多个相同属性的会被后边的源对象的属相覆盖。
let s = Object.assign({
a: 1
})
// {a: 1}
如果目的对象不是对象,则会自动转换为对象
对象属性具有多层嵌套,Object.assign()合并对象
let target = {
a: {
b: {
c: 1
},
e: 4,
f: 5,
g: 6
}
}
let source = {
a: {
b: {
c: 1
},
e: 2,
f: 3
}
}
Object.assign(target, source)
console.log(target)
Object.assign()对于引用数据类型属于浅拷贝。
对象的浅拷贝:浅拷贝是对象共用的一个内存地址,对象的变化相互印象。
对象的深拷贝:简单理解深拷贝是将对象放到新的内存中,两个对象的改变不会相互影响。
栈: 原始数据类型(Undefined,Null,Boolean,Number、String)
堆: 引用数据类型(对象、数组、函数)
基本数据类型存储在 栈内存 中,引用数据类型存储在 堆内存中然后在栈内存中保存 引用地址
对象的遍历方式
遍历出对象中每个key和value的值
- for...in的作用是用于遍历对象
let obj = {
name: 'xiecheng',
age: 34,
school: 'mingri'
}
for (let key in obj) {
console.log(key, obj[key])
}
- Object.keys()用于返回对象所有key组成的数组
let obj = {
name: 'xiecheng',
age: 34,
school: 'mingri'
}
Object.keys(obj).forEach(key => {
console.log(key, obj[key])
})
- Object.getOwnPropertyNames()用于返回对象所有key组成的数组
let obj = {
name: 'xiecheng',
age: 34,
school: 'mingri'
}
Object.getOwnPropertyNames(obj).forEach(key => {
console.log(key, obj[key])
})
- Reflect.ownKeys()用于返回对象所有key组成的数组
let obj = {
name: 'xiecheng',
age: 34,
school: 'mingri'
}
Reflect.ownKeys(obj).forEach(key => {
console.log(key, obj[key])
})