Object ~

对象扩展

简写

const name = 'zhangsan'
const age = 18
const s = 'school'
const obj = {
  name, // 属性简写
  [s]: '清华', // 变量key - school: '清华大学',
  getName() { // 函数简写
    return this.name
  }
}

静态方法

  • Object.is:和 === 相似,属于严格相等,但有一些区别:
console.log(Object.is(NaN, NaN)) // true
console.log(NaN === NaN) // false
console.log(Object.is(+0, -0)) // false
console.log(+0 === -0) // true
  • Object.assign:合并,属于浅拷贝,后者覆盖前者相同属性
Object.assign({}, obj1, obj2, obj3, obj4)
  • in: 判断对象是否存在某个属性,数组是判断下标是否有值
console.log(3 in [1, 2, 3]) // false
  • keys 以数组形式返回键值对(可枚举)
  • getOwnPropertyNames 功能和 Object.keys 一样,但不可枚举的对象依然可以
const obj = {
    name: 'zhangsan',
    age: 18
}
Object.defineProperty(obj, 'name', {
    enumerable: false
})
console.log(Object.getOwnPropertyNames(obj)) // ['name', 'age']
console.log(Object.keys(obj)) // ['age']
  • Object.values 以数组形式返回值(必须是可枚举的对象,即属性修饰符 enumerable 为 false)
  • Object.entries:将对象形式转换为 [key,value] 二维数组形式的数据结构
const obj = {
    name: 'zs'
}
console.log(Object.entries(obj)) // [ ['name', 'zs'] ['age', 18] ]
// [key, val] 相当于解构
for (let [key, val] of Object.entries(obj)) {}
  • Object.fromEntries entries 类型或者Map类型数据结构转换成对象形式
const arr = [
  ['name', 'zhangsan'],
  ['age', '18']
]
const fromEntries = Object.fromEntries(arr) // { name: 'zhangsan', age: '18' }
const course = {
  math: 80,
  english: 85,
  chinese: 90,
  // ... 若干
}
const flatCourse = Object.entries(course)
const filterCourse = Object.fromEntries(
  flatCourse.filter(([key, val], index) => {
    return val > 80
  })
)
console.log(filterCourse) // { english: 85, chinese: 90 }

Object.defineProperty

可在对象上定义一个新属性,或者修改一个对象的现有描述符

  • configurable 配置(可删除、可更改属性描述符、可读取值、可设置值)
  • enumerable 枚举
  • writable 更改值
  • value 默认值
  • get 读取值
  • set 设置值
  • Object.getOwnPropertyDescriptors(obj): 获取对象所有属性的描述符;
  • Object.getOwnPropertyDescriptor(obj, props) : 获取对象某个属性的描述符;
  • Object.freeze: 冻结 (本质 configurable、writable 为 false)、Object.isFrozen:是否冻结
  • Object.seal:密封 (本质 configurable 为 false)、Object.isSealed:是否密封
 const obj = {}
 Object.defineProperty(obj, 'name', {
     value: 'zhangsan',
     writable: true, // 更改
     enumerable: true, // 枚举
     configurable: true // 配置
 })
const obj = {
    name: 'zs'
}
function defineReactive(target, key, value) {
    Object.defineProperty(target, key, {
        get() {
            return value
        },
        set(newVal) {
            value = newVal + ' hello'
        }
    })
}
defineReactive(obj, 'name', obj.name)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值