ECMAScript-对象的扩展

一、对象的扩展
1. 属性简洁表示法
let name = 'zhangsan'
let age = 19

let people = {
    name: name, // 当属性值和属性相同的时候,在es6中可以简写成一个 name
    age: age
}

// 等同于
let people = {
    name, 
    age
}

console.log(people)
2. 属性名表达式
// 如果属性是变量
let name = 'zhangsan'
let age = 19
let s = 'school'

let people = {
    name,
    age,
    // school: '清华' 
    [s]: '清华' // 属性值school是变量 
}
console.log(people)

// 对象定义方法
let name = 'zhangsan'
let age = 19

let people = {
    name,
    age,
    study: function(){
        console.log(this.name) // zhangsan
    }
    // 或者简写
    study(){
        console.log(this.name) // zhangsan
    }
    // 对象中的方法不可使用箭头函数
    study: () => {
        console.log(this.name) // undefined
    }
}
people.study()
3. Object.is()
// 判断值是否相等,严格型的
console.log(Object.is(2, '2')) // false

// 下面是 === 无法判断的
console.log(Object.is(NaN, NaN)) // true
console.log(Object.is(+0, -0)) // false

let obj1 = {
  name: 'zhangsan',
  age: 15
}
let obj2 = {
  name: 'zhangsan',
  age: 15
}
console.log(obj1 == obj2) // false  判断是栈中的引用地址,所以是false
Object.is(obj1, obj2) // fasle
4. 扩展运算符 与 Object.assign()
let x = {
	a: 3,
	b: 4
}
let y = {...x}
console.log(y) // {a: 3, b: 4}

// Object.assign()用于合并对象
// 两个参数:第一个参数表示目标对象 第二个参数表示源对象
// 如果源对象的属性和目标对象的属性相同,源对象中属性的值,覆盖目标对象属性值
let y = {}
Object.assign(y, x) // {a: 3, b: 4}
5. in
// 判断一个对象中是否包含一个属性
// 对象
let x = {
	a: 3,
	b: 4
}
console.log('a' in x) // true

// 数组
let arr = [1, 2, 3]
console.log(3 in arr) // 这样并不是判断3是不是在数组中,只是判断数组下标为3是不是有值, 这边是false
6. 对象的遍历方式
let obj = {
  name: 'zhangsan',
  age: 15
}

// 方式一:
for (let key in obj) {
  console.log(key, obj[key])
}

// 方式二:
Object.keys(obj).forEach(key => {
    console.log(key, obj[key])
})

// 方式三
Object.getOwnPropertyNames(obj).forEach(key => {
  console.log(key, obj[key])
})

// 方式四
Reflect.ownKeys(obj).forEach(key => {
    console.log(key, obj[key])
})
7. Objects.values()、 Objects.entries [ES8]
// Objects.values()
const obj = {
    name: 'zhangsan',
    age: 12,
    school: '清华'
}

// 以前去对象中的值
const res = Object.keys(obj).map( key => obj[key])
console.log(res) // ["zhangsan", 12, "清华"]

// 现在
const res = Object.values(obj)
console.log(res) // ["zhangsan", 12, "清华"]


// Objects.entries 将对象的的key和value以数组的形式返回
for(let [key, value] of Object.entries(obj)) {
    console.log(`${key}: ${value}`) // name: zhangsan  age: 12  school: 清华
}
// Objects.entries中传数组,数组也是对象
console.log(Object.entries(['a','b'])) // ["0", "a"] ["1", "b"]  数组的下标就是key
8. Object.fromEntries【ES10】
  • Object.fromEntries实现了与Object.entries相反的操作。
// 以前一个对象属性
const obj1 = {
    name: 'zhangsan',
    age: 18,
  }

const entries = Object.entries(obj1)
console.log(entries) // 数组结构  [["name","zhangsan"],["age",18]]

// 将数组结构的值转化成对象
const fromEntries = Object.fromEntries(entries)
console.log(fromEntries) //  {name: "zhangsan", age: 18}

// 应用场景
// map -> 对象
const map = new Map()
map.set('name', 'zhangsan')
map.set('age', 20)
console.log(map)
const fromEntries = Object.fromEntries(map)
console.log(fromEntries)

// 找出课程大于60分的课程
const course = {
    math: 67,
    chinese: 80,
    english: 50
}
const res = Object.entries(course).filter(([key, value]) => value > 60)
const obj = Object.fromEntries(res);
console.log(obj)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值