ES6 之 对象的扩展
1、Object.is()
判断俩个值是否相等
+0 不等于 -0 NaN 等于自身
console.log(Object.is('foo','foo')); // true
console.log(Object.is({},{})); // false
console.log(Object.is(+0,-0)); // false
console.log(Object.is(NaN,NaN)); // true
2、Object.assign()
Object.assign(target, source1, source2) 方法将源对象(source)的所有可枚举的属性(不包括原型上的属性)复制到目标对象上
注意:
- 如果只有一个参数,Object.assign()会直接返回该参数
- 如果对象不是对象,则会先转换为对象,然后返回
- 由于undefined和null无法转换为对象,会报错
- 如果非对象参数出现在源source对象位置,不会报错
- 如果在source的原型上定义方法,不会被copy
测试是否能copy不可枚举的属性:
let target = { a: 1 }
let source1 = { b: 2 }
let source2 = { c: 3 }
let a = Object.assign(target, source1, source2) // {a: 1, b: 2, c: 3}
// 同名属性,后面的属性 会 覆盖前面的属性
// 如果只有一个参数,Object.assign会直接返回该参数
// 如果参数不是对象,则会先转成对象,然后返回
// 无法将不可枚举的属性copy到目标对象上
let obj = { b: 11111 }
Object.assign(
obj,
Object.defineProperty({}, 'invisible', {
enumerable: false, // 是否可枚举
value: 'hello'
})
)
console.log(obj) // { b: 11111 }
测试是否能copy原型上的属性:
let target = { a: 1 }
// 构造函数
function Obj3(name, age) {
this.name = name
this.age = age
}
// 在构造函数上定义方法
Obj3.prototype.aaaaaa = function() {
console.log('aaaaaa')
}
var dx1 = new Obj3('Jack', 18)
let a = Object.assign(target, dx1)
console.log(a) // 无法copy 原型上的属性 {a: 1, name: "Jack", age: 18}
作用:为对象添加属性;为对象添加方法,克隆对象,合并对象,为属性指定默认值
3、属性的可枚举性和遍历
对象的每一个属性都有一个描述对象(Descriptor),用来控制该属性的行为。Object.getOwnPropertyDescriptor 方法可以获取该属性的描述对象。
描述对象的作用:用来描述对象的属性,控制它的行为,比如该属性是否可写、可遍历等等。
let obj = {foo: 234}
Object.getOwnPropertyDescriptor(obj, 'foo')

某个属性的enumerable(可枚举性)为false时,有些方法就会忽略这个属性:
- for...in 循环
- Object.keys()
- JSON.stringify():只串行化对象自身的可枚举的属性。
- Object.assign(): 忽略enumerable为false的属性,只拷贝对象自身的可枚举的属性。
对象属性的遍历方法总结:ES6 一共有5种方法可以遍历对象的属性
(1)for...in —— 只遍历对象自身的和继承的可枚举的属性。
(2)Object.keys(obj) —— 返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不包含Symbol)的键名
(3) Object.getOwnPropertyNames(obj) —— 返回一个数组,包含对象的自身的所有属性(不包含Symbol属性,但是包括不可枚举属性)的键名
(4) Object.getOwnPropertySymbols(obj) —— 返回一个数组,包含对象自身的所有Symbol属性的键名。
(5) Reflect.ownKeys(obj) —— 返回一个数组,包含对象自身的所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。
4、Object.keys(),Object.values(),Object.entries()
Object.keys 方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。
Object.values 方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。
Object.entries 方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组。
以上方法供for...of遍历对象
for(let item of Object.entries(obj)) {
console.log(item)
}
5、Object.create(proto, [propertiesObject])
const person = {
isDalao: false,
printIntroduction: function() {
console.log(`你好,我是${this.isDalao? '大佬': '渣渣'}`)
}
}
let me = Object.create(person, {
test: {
value: '这是通过描述属性添加',
enumerable: false
}
})
me.name = 'houfei' // "name" is a property set on "me"
me.isDalao = true // inherited properties can be overwritten
me.printIntroduction() // 你好,我是大佬

6、JS判断对象是否有某个属性
class Person {
constructor(name) {
this.name = name
}
sayHi() {
console.log('你好')
}
}
let obj = new Person('houfei')
// 方法一: . 或 [] (判断对象自身和原型链上存在这个属性)
console.log(obj.age) // false 如果这个属性本身就是 undefined,这个方法也就无效了
console.log(obj['sayHi']) // f() { ... }
// 方法二: in 无法区分自身和原型链上的属性
console.log('age' in obj) // false
console.log('sayHi' in obj) // true
// 方法三:hasOwnProperty 判断属性是否在实例上,不再原型上
console.log(obj.hasOwnProperty('age')) // false
console.log(obj.hasOwnProperty('sayHi')) // false
ES6 之 对象的扩展的更多相关文章
- ES6中对象的扩展
ES6不仅为字符串.数值和数组带来了扩展,也为对象带来了很多新特性.这一节,我们来一起学习一下对象的扩展. 对象的传统表示法 我们回顾一下,对象的传统表示法: let person = { " ...
- ES6 对对象的扩展
1.对象类别 普通对象:具有JavaScript对象的所有默认内部行为 特异对象: 具有某些与默认行为不符的内部行为 标准对象: ECMAScript 6 规范中新定义的对象,例如Array,Date ...
- 关于es6中对象的扩展
1.Object.is() es5比较两个值是否相等,只有两个运算符,相等(==) 和 严格相等(===),他们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0 等于 -0.es6提 ...
- es6学习笔记--字符串&数值&数组&函数&对象的扩展
这几天抽空学习了es6语法,关于字符串,数值,数组,函数以及对象的扩展,看到es6标准入门这本书,里面讲的扩展特别多,我认为有几部分在项目上用不到,就挑有用的当笔记学习了. 字符串的扩展 str.in ...
- es6对象的扩展
对象(object)是 JavaScript 最重要的数据结构之一. object 在es6中新增了很多便利的方法 在es6中允许直接写入变量和方法的名称直接作为对象的属性 let x =1 ,y=2 ...
- Es6对象的扩展和Class类的基础知识笔记
/*---------------------对象的扩展---------------------*/ //属性简写 ,属性名为变量名, 属性值为变量的值 export default functio ...
- ES6 学习笔记之四 对象的扩展
ES6 为对象字面量添加了几个实用的功能,虽然这几个新功能基本上都是语法糖,但确实方便. 一.属性的简洁表示法 当定义一个对象时,允许直接写入一个变量,作为对象的属性,变量名就是属性名. 例1: , ...
- ES6的新特性(9)——对象的扩展
对象的扩展 属性的简洁表示法 ES6 允许直接写入变量和函数,作为对象的属性和方法.这样的书写更加简洁. const foo = 'bar'; const baz = {foo}; baz // {f ...
- ES6对象的扩展及新增方法
1.属性的简洁表示法 ES6允许直接写入变量和函数,作为对象的属性和方法.这样的书写更加简洁. const foo = 'bar'; const baz = {foo}; baz//{foo:'bar ...
随机推荐
- ASP.NETCore -----导出Excel文件并下载
本事例分为nopi(安装DotNetCore.NPOI)下载和EPPlus(EPPlus.Core.dll)下载,其中npoi下载演示的是根据执行的模板进行数据下载 npoi帮助类NpoiExcelU ...
- H5端js实现图片放大查看-插件photoswipe的使用
这个是一个不知道什么鬼的东西,按照他需求改的,我也不知道对不对...看介绍说是h5把,我这个是用那个插件photoswipe的实现的 demo包地址: https://files-cdn.cnblog ...
- class(二)--派生类的继承
前言 从我之前的一篇笔记对象的继承中, 我们可以知道JS的继承方式依赖原型链,而比较好的继承方式是寄生组合式继承 先来温习下什么是寄生组合式继承 function Rectangle(length, ...
- How To Configure NFS Client on CentOS 8 / RHEL 8
https://computingforgeeks.com/configure-nfs-client-on-centos-rhel/
- Acwing198 反素数
原题面:https://www.acwing.com/problem/content/200/ 题目大意:对于任何正整数x,其约数的个数记作g(x),例如g(1)=1.g(6)=4.如果某个正整数x满 ...
- TX2开发板Ubuntu16.04设置静态IP
TX2开发板Ubuntu16.04设置静态IP https://www.cnblogs.com/qilai/p/11285445.html 首先打开一个Terminal输入 ifconfig 查看自 ...
- Exchange Server 2010邮件策略与遵从性
本文档附带了一个附档,里面详细的描述了如何在Exchange Server 2010中配置如下内容: 1.邮件分类 2.免责申明 3.配置信息隔离墙 4.邮件审核 5.Exchange 2010与AD ...
- M3U8地址在谷歌浏览器中播放
该案例git码云地址:https://gitee.com/kawhileonardfans/hls-player-example 1.下载插件 插件地址:https://files.cnblogs.c ...
- Jinja2语法小记
jinja2模板语法小记 Jinja2模板中文文档 三种常见界定符 表达式 {{ ... }} 用于装载字符串.变量.函数调用等 语句 {% ... %} 用于装载控制语句,比如if判断.for循环等 ...
- 三十五、在SAP中定义选择屏幕,设置选择范围
一.代码如下,有2个地方需要注意,一个是SELECT-OPTIONS,还有一个是IN的使用 二.我们定义一下选择文本 三.我们运行程序 四.输出 五.当然,选择的时候,我们也可以用其他的方式,如下图