对象扩展:

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. 利用git reflog找回错误的重置

    在开发中经常需要reset分支,如果在reset前没有记住分支指向的提交ID,想要重置回原来的提交恐怕大多数开发者是重新拉取远程版本库,再rebase分支.但如果连不上远程版本库或没有远程版本怎么办呢 ...

  2. 自定义ClassLoader加载加密的class文件

    package com.yd.wmsc.util; public class Test { public void say(){ System.out.println("Say Hello& ...

  3. HDU 4143 A Simple Problem 分解因式

    求一个最小的正整数x,使得(y + x) (y - x) = n成立 考虑一下n的分解因式. 可能会想到枚举n的约数,那么a * b = n成立,取最小的x即可 但是要枚举到n / 2,这样会超时. ...

  4. Oracle快速插入数据append

    1:用merge into 进行匹配更新和插入,2: 开启并行,提高速度3: 如果可以的话加NOLOGING 不写入日志4:如果数据有规律的话,分批次执行 1.使用marge快速插入; MERGE / ...

  5. .net中Response.End() 和Response.Redirect("http://dotnet.aspx.cc");

    问:什么情况下需要Response.End()语句,加这句有什么好处 答: 首先你要理解Response.End()的意思,它的意思是终止执行下面的语句!但有时不加和加上都一样,但还要加上好,为什么呢 ...

  6. Vmware 可用的激活码

    4F207-8HJ1M-WZCP8-000N0-92Q6G 0A6Z5-8H1EJ-WZCL1-PK072-23DJG 0F0Q9-8F38L-RZXT9-4U054-ACW5F JA02E-09H4 ...

  7. python.h没有那个文件或目录解决方法

    我用的是Deepin Linux,这应该是linux平台的问题,别的linux os也是执行安装,命令不同而已,windows和Mac不太清楚. 如果你使用的是python2.x,那么使用下面的语句: ...

  8. java基础知识——Java的定义,特点和技术平台

    (作者声明:对于Java编程语言,很多人只知道怎么用,却对其了解甚少.我也是其中一员.所以菜鸟的我,去查询了教科书以及大神的总结,主要参考了<Java核心技术>这本神作.现在分享给大家!) ...

  9. 从零开始的全栈工程师——js篇2.1(js开篇)

    JS开篇 一.js介绍 全称 javascript 但不是java 他是一门前台语言 而java是后台语言js作者 布兰登·艾奇 前台语言:运行在客户端的后台语言:跟数据库有关的 能干什么?    页 ...

  10. 微信公众平台网页开发实战--3.利用JSSDK在网页中获取地理位置(HTML5+jQuery)

    复制一份JSSDK环境,创建一份index.html文件,结构如图7.1所示. 图7.1  7.1节文件结构 在location.js中,封装“getLocation”接口,如下: 01 wxJSSD ...