对象扩展:

1、Object.is(A,B) :比较两个值是否相等,取代===运算;只要值相等代表相等;其中NAN和NAN相等;+0和-0不相等;

2、Object.assign(target,source1,source2.......) :合并源对象的所有可枚举属性到目标对象;同名属性后覆盖前;just one obj,return this obj;【仅一个参数】将源目标非对象先转化为对象,无法转化的将会报错undefined;null;【多个参数】不在首参数为数值、字符串、布尔值、undefined、null均不会复制;只拷贝源对象的自身属性,不拷贝继承属性;【浅拷贝】

注意⚠️:Object.assign处理数组,相同下标的元素后者覆盖前者

    对于取值函数的合并,会先求取值之后合并;取值函数get foo(){return 1} -> foo:1

    es6规定:class的原型均为不可枚举

使用:

/**
* 为对象添加属性
*/
class Untils {
constructor(x, y) {
Object.assign(this, x, y) // 通过Object.assign方法将x,y添加到Untils的实例上
}
}
/**
* 为对象添加方法
*/
Object.assign(someClass.prototype, {
method(x, y) {},
anotherMethod() {}
})
/**
* 克隆对象
*/
function clone(origin) {
return Object.assign({}, origin)
}
/**
* 合并多个对象
*/
(target, ...source) => Object.assign(target, ...source)
/**
* 为属性指定默认值
*/
const defaultOpts = {
level: 3,
color: red
}
function addOpts (opt) {
return Object.assign({},defaultOpts,opt) // defaultOpts引用类型有问题
}
3、Object.keys 遍历对象可枚举的属性的键名,返回数组;不含继承的属性、不含symbol属性【es5】取代for...in
4、Object.values 遍历对象可枚举的属性的键值,返回数组;不含继承的属性、不含symbol属性 配合for...of使用
5、Object.entries 遍历对象可枚举的属性的键值对,返回数组;不含继承的属性、含symbol属性的将忽略当前键值对 配合for...of使用
6、Object.getOwnPropertyDescriptor方法是为了解决Object.assign对get set函数的拷贝值问题,set get无return的情况下,Object.assign拷贝的值为undefined
7、Object.defineProperties(obj,objProperty,DescriptorObj) 修改对象属性默认特性【数据属性】的特定方法【es5】obj属性所在对象,属性名称,属性的描述符对象
8、Object.setPrototypeOf 取代_proto_对原型的处理【写】
9、Object.getPrototypeOf 取代_proto_对原型的处理【读】
10、Object.create 取代_proto_对原型的处理【生成操作】方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__Object.create({},obj)第二个obj是添加到新创建对象上面的可枚举属性,同时可配置描述符对象 详细可点击此链接查看https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/create
11、super指向当前对象的prototype对象,只能用于对象的方法之中而不能用于对象方法的赋值操作【待总结继承时详述】
解构赋值:要求等号右边为对象,不能为undefined/null,解构赋值的参数需作为最后一位参数;对复合类型仅作为引用;
扩展运算符: ... 相当于Object.assign 取出参数对象的所有可遍历属性拷贝到当前对象之中;
12、Object.hasOwnProperty 用于判断属性是来自对象本身,而不是通过继承自原型链

对象的内部属性:这些特性是为了实现javascript引擎

Descriptor:描述对象【每个对象都有】通过Object.getOwnPropertyDescriptor(obj,'someProperty') 访问

数据属性:如下【还有一种是防问器属性】

enumerable: false 不可枚举

configurable: true 属性修改,可delete,修改为false之后无法再改变此描述符,再次修改 static mode会报错

writable:true 修改属性值
value 读取/写入新值 默认undefined

[[PrimitiveValue]] :原始值

_proto_ 用来读取及设置当前属性的prototype对象【IE11】在无法使用的内部属性时,es6提供了可供使用的对prototype的操作方法以上6、7、8

es6之Object扩展及内部属性的总结的更多相关文章

  1. js--对象内部属性与 Object.defineProperty()

    前言 JavaScript 中允许使用一些内部特性来描述属性的特征,本文来总结一下对象内部属性与 Object.defineProperty() 的相关知识. 正文 1.属性类型 js中使用某些内部属 ...

  2. ES6 函数的扩展2

    8.2 rest参数 ES6引入rest参数(形式为"-变量名"),用于获取函数的多余参数,这样就不需要使用arguments对象了. arguments对象并没有数组的方法,re ...

  3. ES6 之 Object 的方法总结

    阅读:Object 1.obj的"." 或 "[]"方法 读取对象的属性或方法 对象属性的读取:ES6中被Proxy的get(target, propKey, ...

  4. JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法

    相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...

  5. 数组的复制及ES6数组的扩展

    一.数组的复制 // alert([1,2,3]==[1,2,3]); let cc = [0,1,2]; let dd = cc; alert(dd==cc);//此时改变dd会影响cc ES5 只 ...

  6. es6对象的扩展

    对象(object)是 JavaScript 最重要的数据结构之一. object 在es6中新增了很多便利的方法 在es6中允许直接写入变量和方法的名称直接作为对象的属性 let x =1 ,y=2 ...

  7. es6数组的扩展

    数组扩展运算符 ...(三个点) const demoArr=[0,1,2,3,4] console.log(...demoArr) // 0 1 2 3 4 // 他把一个数组用逗号分隔了出来 // ...

  8. ES6中Object.assign() 方法

    ES6中Object.assign() 方法 1. 对象合并Object.assign 方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象上.如下代码演示: var targ ...

  9. es6 学习小记 扩展运算符 三个点(...)

    参考: es6 扩展运算符 三个点(...) 经常回顾,方能真正掌握. 一.含义 扩展运算符( spread )是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. ...

随机推荐

  1. jmeter 正则获取参数集合和ForEach控制器结合使用(转)

    怎么把第一个请求获取的返回的多个id,在第二个请求中逐个以单个id作为请求参数来请求? 为了解决这个问题,模拟下该场景 1.请求www.163.com 主页,获取响应中的所有数字,这个获取的数字集合暂 ...

  2. Polycarp's Pockets(思维)

    Polycarp has nn coins, the value of the ii-th coin is aiai. Polycarp wants to distribute all the coi ...

  3. 得到RequestVO

    import java.io.IOException; import java.nio.charset.Charset; import javax.servlet.ServletInputStream ...

  4. c#spinLock使用

        版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u011915028/article/details/53011811 一下解释摘自msdn  ...

  5. 存储过程 jdbc

    package com.itheima.procedure; import java.sql.CallableStatement; import java.sql.Connection; import ...

  6. 关于SQL Server数据库中的标识列

    一.标识列的定义以及特点 SQL Server中的标识列又称标识符列,习惯上又叫自增列. 该种列具有以下三种特点: 1.列的数据类型为不带小数的数值类型 2.在进行插入(Insert)操作时,该列的值 ...

  7. Primefaces dataTable设置某个cell的样式问题

    设置primefaces dataTable的源网段列的Cell可以编辑,当回车键保存时,判断是否输入的网段合法,如果不合法就显示警告信息,并将这个不合法的数据用红色表示.问题是,怎么给这一个cell ...

  8. JavaScript函数体系

    第4章  JavaScript函数 1. 函数基本介绍 ① 为什么需要函数 函数最大的好处就是将零散的代码封装到了一起,当我们要再次使用该功能的时候,不需要再重新书写代码,只需要调用封装好的函数就可以 ...

  9. Java排序算法(三)

    Java排序算法(三) 三.Java排序算法总结 从这三组时间复杂度对比中,可以看出,堆排序和归并排序是不管在什么情况下发挥稳定的,快速排序好的时候表现如天才,坏情况下比较差强人意,甚至在等待排序个数 ...

  10. Android入门:Activity生命周期

    一.Activity生命周期介绍 我们在学Java Web时会学到Servlet的生命周期,因此对生命周期的概念已经有一定了解,简单地说就是某个事物从出生到死亡的过程. Activity也存在声明周期 ...