文章目录

  • 1. 属性简洁表示法
  • 2. 属性名表达式
  • 3. Object.is()
  • 4. Object.assign()
  • 5. in
  • 6. 对象的遍历方式

1. 属性简洁表示法

ES5表示Object必须是 key: value 形式:

let name = 'hello'
let age = 18
let obj = {name: name,age: age,study: function() {console.log(this.name + '正在学习')}
}

ES6 可以简写(当value的变量名和key一致):

let name = 'hello'
let age = 18
let obj = {name,age,study() {console.log(this.name + '正在学习')}
}

2. 属性名表达式

在 ES6 可以直接用变量或者表达式来定义Object的 key。

let s = 'address'
let obj = {name: 'xiaoming',[s]: 'shenzhen',say () {console.log('hello' + this.name)}
}

3. Object.is()

判断两个对象是否相等,Object.is不会强制转换两边的值。

== 等同,比较运算符,两边值类型不同的时候,先进行类型转换,再比较;
=== 恒等,严格比较运算符,不做类型转换,类型不同就是不等;
Object.is() 是ES6新增的用来比较两个值是否严格相等的方法,与===的行为基本一致,但有区别

=== 的特性:

  • 如果类型不同,就不相等
  • 如果两个都是数值,并且是同一个值,那么相等;值得注意的是,如果两个值中至少一个是NaN,那么不相等(判断一个值是否是NaN,可以用isNaN()Object.is()来判断)。
  • 如果两个都是字符串,每个位置的字符都一样,那么相等;否则不相等。
  • 如果两个值都是同样的Boolean值,那么相等。
  • 如果两个值都引用同一个对象或函数,那么相等,即两个对象的引用地址也必须保持一致;否则不相等。
  • 如果两个值都是null,或者都是undefined,那么相等。

Object.is()===基本一致,不过有两处不同:

  • +0不等于-0
  • NaN等于自身
+0 === -0 //true
NaN === NaN // falseObject.is(+0, -0) // false
Object.is(NaN, NaN) // true

判断对象时,需要引用地址也相同:

let obj1 = { // 相当于new Object()name: 'xiaoming',age: 18
}let obj2 = { // 相当于new Object()name: 'xiaoming',age: 18
}
console.log(obj1 == obj2) // false  判断地址console.log(Object.is(obj1, obj2)) // falselet obj2 = obj1console.log(Object.is(obj1, obj2)) // true

4. 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()对于引用数据类型属于浅拷贝

对象的浅拷贝:浅拷贝是对象共用的一个内存地址,对象的变化相互印象。
对象的深拷贝:简单理解深拷贝是将对象放到新的内存中,两个对象的改变不会相互影响。

5. in

  • 判断对象里面有没有这个变量或者方法
let obj = {a: 1,b: 2
}
console.log('a' in obj) // true
  • 判断数组的下标有没有值,是不是为空
let arr = [1,,'hello',undefined,null,'']
console.log(0 in arr) // true
console.log(1 in arr) // false
console.log(2 in arr) // true
console.log(3 in arr) // true
console.log(4 in arr) // true
console.log(5 in arr) // true

6. 对象的遍历方式

let obj = {name: 'xiaoming',age: 18,address: 'shenzhen'
}// 1. for...in 遍历
for (let key in obj) {console.log(key, obj[key])
}// 2. Object.keys()用于返回对象所有key组成的数组
Object.keys(obj).forEach(key => {console.log(key, obj[key])
})// 3. Object.getOwnPropertyNames()用于返回对象所有key组成的数组
Object.getOwnPropertyNames(obj).forEach(key => {console.log(key, obj[key])
})// 4. Reflect.ownKeys()用于返回对象所有key组成的数组
Reflect.ownKeys(obj).forEach(key => {console.log(key, obj[key])
})

【ES6(2015)】Object对象相关推荐

  1. ES6中object对象属性

    //es5中定义对象属性要么字面量.要么点.要么[],变量与空格在这些方法中没有得到好的支持 /在es6中可以这么定义: let w='www'; let obj1={w};//obj1={w:'ww ...

  2. ES6的Reflect对象

    Reflect对象的方法与Proxy对象的方法一一对应,只要proxy对象上有的方法reflect也能找到. ES6将Object对象的一些属于语言内部的方法放到Reflect对象上,从Reflect ...

  3. 【ES6(2015)】Module模块

    文章目录 1. 模块化的发展 2. export 3. as 4. export default 5. import 1. 模块化的发展 随着前端的发展,web技术日趋成熟,js功能越来越多,代码量也 ...

  4. 【ES6】Proxy对象

    [ES6]Proxy对象 一.Proxy的基本用法 二.Proxy示例的方法 1)get() 2)set() 3)apply() 查看更多ES6教学文章: 参考文献 引言:ES6规范里面新增了Prox ...

  5. JavaScript:对Object对象的一些常用操作总结

    JavaScript对Object对象的一些常用操作总结. 一.Object.assign() 1.可以用作对象的复制 var obj = { a: 1 }; var copy = Object.as ...

  6. 谈谈 ES6 的 Promise 对象

    2019独角兽企业重金招聘Python工程师标准>>> 谈谈 ES6 的 Promise 对象 异步编程 promise es6 javascript 前言 开篇首先设想一个日常开发 ...

  7. es6判断对象key是否存在,ES6中获取对象的key

    ES6中获取对象的key const json = {'a': 123, 'b': 321}; Object.keys(json).forEach(key => { window.console ...

  8. 【ES6(2015)】Reflect

    文章目录 1. 设计目的 2. 常用方法 Reflect对象与Proxy对象一样,也是ES6 为了操作对象而提供的新 API. 1. 设计目的 将Object属于语言内部的方法放到Reflect上 l ...

  9. js 判断一个 object 对象是否为空

    js 判断一个 object 对象是否为空 转载原文 判断一个对象是否为空对象,本文给出三种判断方法: 1.最常见的思路,for...in... 遍历属性,为真则为"非空数组":否 ...

  10. ES6之object.assign()是深拷贝还是浅拷贝

    ES6之object.assign()是深拷贝还是浅拷贝 1.概念 浅拷贝--只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存. 深拷贝--会另外创造一个一模一样的对象,新对象跟 ...

最新文章

  1. 机器学习中模型参数和模型超参数分别是什么?有什么区别?
  2. 淘宝旺铺基础版装修出专业版效果(不花钱也一样做到)
  3. 中等职业教育计算机教学案例范文,职业中学计算机教学案例
  4. centos7 安装 vsftpd 过程
  5. c++如何编写线程安全的DLL
  6. 《设计模式详解》结构型模式 - 代理模式
  7. 二进制包如何知道go 版本_你有同时使用多版本 Go 语言的需求吗,那就快使用多版本管理利器 GVM 吧!...
  8. 20145236 《Java程序设计》第4周学习总结
  9. 经典网络-InceptionV1论文及实践
  10. 团队任务1:第一次团队会议
  11. Ardunio开发实例-VCNL4010 接近度和环境光传感器
  12. 2370 小机房的树
  13. 2022出海非洲:南非电商市场现状及发展前景
  14. python docker 镜像过大_Docker镜像压缩与优化操作
  15. SurfaceView及TextureView区别
  16. 面试为什么需要了解JVM
  17. 学无止境:8月最热免费优秀资源推荐
  18. python 可视化图表 联动_Vue2+Echarts实现多种图表数据可视化Dashboard详解(附源码)...
  19. IOS学习笔记68 -- 开发的一些奇巧淫技
  20. java实现Canny算法

热门文章

  1. 《影视特效镜头跟踪技术精粹(第2版)》——导读
  2. grunt集成自动启动
  3. 转载:redis备份策略
  4. ORA-29807: specified operator does not exist
  5. Oracle创建表空间及用户
  6. IIS7 设置 UrlRewrite
  7. 如果让你选择计算机本科最重要的三门课,会选什么?高手都选他们!
  8. 辣味就直往眼睛的专业o2o资讯
  9. 东风来了的飞鸽传书源码
  10. 如果番茄花园在美国...