8 24知识总结

发布于:2023-01-04 ⋅ 阅读:(648) ⋅ 点赞:(0)

es6对象方法

Object.assign() 用于将所有可枚举属性的值从一个或多个源对象,复制到目标对象。

语法:Object.assign(obj, ...sources)

  • obj:目标对象
  • sources:源对象,可以是多个
  • 返回目标对象
  const obj = { a: 1 }
  const copy = Object.assign({}, obj)
  console.log(copy); // { a: 1 }

 const obj1 = { a: 1, b: 2 } const obj2 = { b: 3, c: 4 } const obj3 = { c: 5, d: 6 } ​ const obj = Object.assign(obj1, obj2, obj3) console.log(obj) // {a: 1, b: 3, c: 5, d: 6}

注:如果目标对象与源对象有同名属性,则后面的属性会覆盖前面的属性;如果多个源对象有同名的属性,则后面的源对象会覆盖前面的。

Object.create() 创建一个新对象

语法:Object.create(proto)

    • proto:新创建对象的原型对象

    • 返回一个新对象

const person = {
    isHuman: false,
    printIntroduction: function() {
        console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`);
    }
}

const me = Object.create(person)
console.log(me) // {}
me.name = 'Matthew' // "name" is a property set on "me", but not on "person"
me.isHuman = true // inherited properties can be overwritten
me.printIntroduction() // My name is Matthew. Am I human? true
console.log(me.__proto__ === person) //true
​

// 通过new Object()方式创建对象
const me = new Object(person)
console.log(me) // {isHuman: false, printIntroduction: ƒ}
me.name = 'Matthew'
me.isHuman = true
console.log(me) // {isHuman: true, name: "Matthew", printIntroduction: ƒ}

Object.create() 可以实现对象的继承,可以通过对象实例的 __proto__ 属性访问原型链上的属性。

new Object() 方法创建的对象,给对象原型添加属性和方法则需要通过构造函数或者类。

function Person(name, age){
    this.name=name
    this.age=age
}
Person.prototype.sayHi = function(){
    console.log(this.name)
}

let p = new Person('jack', 20)
console.log(p.sayHi()) // jack
console.log(p.__proto__ === Person.prototype) // true

3. Object.defineProperty()

Object.defineProperty() 添加或修改现有属性,并返回该对象。

语法:Object.defineProperty(obj, prop, description)

    • obj:必需。目标对象

    • prop:必需。需定义或修改的属性的名字

    • descriptor:必需。目标属性所拥有的特性,以对象形式{}书写。

      1. value:设置属性的值,默认为 undefined

      2. writable:值是否可以重写,true | false,默认为 false

      3. enumerable:目标属性是否可以被枚举,true | false,默认为 false

      4. configurable:目标属性是否可以被删除或是否可以再次修改特性,true | false,默认为 false

const obj = {
    id: 1,
    name: 'phone',
    price: '$599'
}
Object.defineProperty(obj, 'num', {
    value: 100,
    enumerable: false
})

console.log(obj) // {id: 1, name: "phone", price: "$599", num: 100}
console.log(Object.keys(obj)) // ["id", "name", "price"]

4. Object.entires()

Object.entires() 遍历并返回该对象可枚举属性的键值对数组

语法:Object.entires(obj)

    • 返回对象可枚举属性的键值对数组

const obj = {
    a: 'apple',
    b: 'bar'
}
console.log(Object.entries(obj)) // [ ['a', 'apple'], ['b', 'bar'] ]

for (const [key, value] of Object.entries(obj)) {
    console.log(`${key}: ${value}`) //"a: somestring"  "b: 42"
}

Object.entries(obj).forEach(([key, value]) => {
    console.log(`${key}: ${value}`) // "a: somestring", "b: 42"
})

5. Object.keys() 

Object.keys() 用于获取对象自身所有可枚举的属性

语法:Object.keys(obj)

    • 效果类似于 for...in

    • 返回一个由属性名组成的数组

const obj = {
    id: 1,
    name: 'phone',
    price: '$599',
    num: 100
}
const objKeys = Object.keys(obj);
console.log(objKeys); //['id', 'name', 'price', 'num']
​
const arr = ['a', 'b', 'c']
const arrKeys = Object.keys(arr)
console.log(arrKeys) //['0', '1', '2']

补充:如果只要获取对象的可枚举属性,可用Object.keys或用for...in循环(for...in循环会得到对象自身的和继承的可枚举属性,可以使用 hasOwnProperty()方法过滤掉)

6. Object.values() 

Object.values() 获取对象自身所有可枚举的属性值

语法:Object.values(obj)

    • 返回一个由属性值组成的数组

const obj = {
    id: 1,
    name: 'phone',
    price: '$599',
    num: 100
}
const objValues = Object.values(obj);
console.log(objValues); //[1, 'phone', '$599', '100']

附:对象的所有属性和方法

Object.defineProperty() 添加或修改现有属性,并返回该对象。

语法:Object.defineProperty(obj, prop, description)

    • obj:必需。目标对象

    • prop:必需。需定义或修改的属性的名字

    • descriptor:必需。目标属性所拥有的特性,以对象形式{}书写。

      1. value:设置属性的值,默认为 undefined

      2. writable:值是否可以重写,true | false,默认为 false

      3. enumerable:目标属性是否可以被枚举,true | false,默认为 false

      4. configurable:目标属性是否可以被删除或是否可以再次修改特性,true | false,默认为 false

const obj = {
    id: 1,
    name: 'phone',
    price: '$599'
}
Object.defineProperty(obj, 'num', {
    value: 100,
    enumerable: false
})

console.log(obj) // {id: 1, name: "phone", price: "$599", num: 100}
console.log(Object.keys(obj)) // ["id", "name", "price"]

4. Object.entires()

Object.entires() 遍历并返回该对象可枚举属性的键值对数组

语法:Object.entires(obj)

    • 返回对象可枚举属性的键值对数组

const obj = {
    a: 'apple',
    b: 'bar'
}
console.log(Object.entries(obj)) // [ ['a', 'apple'], ['b', 'bar'] ]

for (const [key, value] of Object.entries(obj)) {
    console.log(`${key}: ${value}`) //"a: somestring"  "b: 42"
}

Object.entries(obj).forEach(([key, value]) => {
    console.log(`${key}: ${value}`) // "a: somestring", "b: 42"
})

5. Object.keys() 

Object.keys() 用于获取对象自身所有可枚举的属性

语法:Object.keys(obj)

    • 效果类似于 for...in

    • 返回一个由属性名组成的数组

const obj = {
    id: 1,
    name: 'phone',
    price: '$599',
    num: 100
}
const objKeys = Object.keys(obj);
console.log(objKeys); //['id', 'name', 'price', 'num']
​
const arr = ['a', 'b', 'c']
const arrKeys = Object.keys(arr)
console.log(arrKeys) //['0', '1', '2']

补充:如果只要获取对象的可枚举属性,可用Object.keys或用for...in循环(for...in循环会得到对象自身的和继承的可枚举属性,可以使用 hasOwnProperty()方法过滤掉)

6. Object.values() 

Object.values() 获取对象自身所有可枚举的属性值

语法:Object.values(obj)

    • 返回一个由属性值组成的数组

const obj = {
    id: 1,
    name: 'phone',
    price: '$599',
    num: 100
}
const objValues = Object.values(obj);
console.log(objValues); //[1, 'phone', '$599', '100']

Object.entires() 遍历并返回该对象可枚举属性的键值对数组

语法:Object.entires(obj)

Object.keys() 用于获取对象自身所有可枚举的属性

语法:Object.keys(obj)

附:对象的所有属性和方法

Object.values() 获取对象自身所有可枚举的属性值

语法:Object.values(obj)

Object.setPrototypeOf()

用来设置一个对象的prototype对象,返回参数对象本身

Object.getPrototypeOf()

Object.setPrototypeOf方法配套,用于读取一个对象的原型对象

对象的拓展运算符

ES2017 将...拓展运算符引入了对象

Null 传导运算符

读取对象内部某个属性时,往往要判断该对象是否存在该属性。

Null传导运算符的四种写法

  • obj?.prop // 读取对象属性
  • obj?.[expr] // 同上
  • func?.(...args) // 函数或对象方法的调用
  • new C?.(...args)  // 构造函数的调用

分类: JavaScript/es6前端

好文要顶 关注我 收藏该文 

 

sugar_coffee
粉丝 - 26 关注 - 0

+加关注

1

« 上一篇: vue-router 路由传参,刷新页面参数丢失
» 下一篇: vue-router的导航钩子(导航守卫)

posted @ 2020-10-28 14:12  sugar_coffee  阅读(1723)  评论(0)  编辑  收藏  举报

刷新评论刷新页面返回顶部

登录后才能查看或发表评论,立即 登录 或者 逛逛 博客园首页

【推荐】MASA Framework 开启全新的.NET应用开发体验
【推荐】下一步,敏捷!云可达科技SpecDD敏捷开发专区
【推荐】腾讯云多款云产品1折起,买云服务器送免费机器

编辑推荐:
· 纯 CSS 实现拼图游戏
· ASP.NET Core 6 框架揭秘实例演示:异常处理高阶用法
· 彻底了解线程池的原理——40行从零开始自己写线程池
· [MAUI]在窗口(页面)关闭后获取其返回值
· .net 温故知新:IOC控制反转,DI依赖注入

最新新闻
· 刀口舔血还是抄底?“木头姐”投入近7000万美元加仓Zoom
· “北慧聪,南阿里”,昔日与阿里齐名,如今传出业务关停,慧聪员工:仅电话销售业务员工待岗
· 张朝阳谈年轻人的使命感:养家糊口本身就是一种责任和意义
· prompt攻防战!哥伦比亚大学提出BPE造词法,可绕过审核机制,DALL-E 2已中招
· 比AlphaFold2快十倍!国产开源项目加速蛋白质预测,支持超长序列
» 更多新闻...

分类: JavaScript/es6前端

好文要顶 关注我 收藏该文 

 

sugar_coffee
粉丝 - 26 关注 - 0

+加关注

1

« 上一篇: vue-router 路由传参,刷新页面参数丢失
» 下一篇: vue-router的导航钩子(导航守卫)

posted @ 2020-10-28 14:12  sugar_coffee  阅读(1723)  评论(0)  编辑  收藏  举报

刷新评论刷新页面返回顶部

登录后才能查看或发表评论,立即 登录 或者 逛逛 博客园首页

【推荐】MASA Framework 开启全新的.NET应用开发体验
【推荐】下一步,敏捷!云可达科技SpecDD敏捷开发专区
【推荐】腾讯云多款云产品1折起,买云服务器送免费机器

编辑推荐:
· 纯 CSS 实现拼图游戏
· ASP.NET Core 6 框架揭秘实例演示:异常处理高阶用法
· 彻底了解线程池的原理——40行从零开始自己写线程池
· [MAUI]在窗口(页面)关闭后获取其返回值
· .net 温故知新:IOC控制反转,DI依赖注入

最新新闻
· 刀口舔血还是抄底?“木头姐”投入近7000万美元加仓Zoom
· “北慧聪,南阿里”,昔日与阿里齐名,如今传出业务关停,慧聪员工:仅电话销售业务员工待岗
· 张朝阳谈年轻人的使命感:养家糊口本身就是一种责任和意义
· prompt攻防战!哥伦比亚大学提出BPE造词法,可绕过审核机制,DALL-E 2已中招
· 比AlphaFold2快十倍!国产开源项目加速蛋白质预测,支持超长序列
» 更多新闻...


网站公告

今日签到

点亮在社区的每一天
去签到