属性简洁表示法
属性名表达式
Objec.is()
扩展运算符 与 Object.assign()
in
对象的遍历方式
 
属性简洁表示法:
如果属性key跟变量名一样,可简写
let name = '张三'
let age = 18
let people = {
name,
age
}
console.log(people);

  

属性名表达式:
当我们想key是变量的时候,就需要使用属性名表达式
let s = 'school'
let obj = {
[s]: '清华'
}
console.log(obj); // 此时obj的key[s],就变成school

  

对象里面function也可以进行简写
let obj2 = {
name: '张三',
study() {
console.log(this.name + '正在学习');
}
}
obj2.study()

  

Objec.is:用来判断两个值是否相等,且判断类型
那么跟===全等有什么区别?
console.log(2 === '2'); // false
console.log(Object.is(2, '2')); // false
console.log(NaN === NaN); // false
console.log(Object.is(NaN, NaN)); // true
console.log(+0 === -0); // true
console.log(Object.is(+0, -0)); // false

  

两个对象的比较并不是比较对象的内容,而是比较栈内存里面的引用地址
let obj3 = {}
let obj4 = {}
console.log(obj3 === obj4); // false
console.log(Object.is(obj3, obj4)); // false
let obj5 = obj3
console.log(obj3 === obj5); // true
console.log(Object.is(obj3, obj5)); // true

  

扩展运算符:
let x = {
a: 1,
b: 2
}
let y = {
...x
}
console.log(y);

  

Object.assign:将所有可枚举属性的值从一个或多个源对象分配到目标对象。它将返回目标对象。
语法:Object.assign(target, ...sources)
let z = {}
Object.assign(z, x)
console.log(z);

  

in:用来判断对象是否包含某属性
console.log('a' in x); // true
console.log('aa' in x); // false

  

in也能用于数组,但是用在数组是判断当前索引下面是否有值
let arr = [1, 2, 3]
console.log(2 in arr); // true,索引2位置有数字3
console.log(3 in arr); // false,索引3位置没有值

  

对象的遍历:
let objEach = {
name: '张三',
age: 18,
school: '清华'
}
// 方法一
for (let key in objEach) {
console.log(key, objEach[key]);
}
// 方法二
Object.keys(objEach).forEach(key => {
console.log(key, objEach[key]);
})
// 方法三
Object.getOwnPropertyNames(objEach).forEach(key => {
console.log(key, objEach[key]);
})
// 方法四
Reflect.ownKeys(objEach).forEach(key => {
console.log(key, objEach[key]);
})

  

-------------------------------------------ES8对象的扩展---------------------------------------------------------

Object.values()
Object.entries()
const obj = {
name: '张三',
age: 18
} console.log(Object.keys(obj));
console.log(Object.values(obj)); console.log(Object.entries(obj));

  

对象属性描述符
Object.getOwnPropertyDescriptors()
    value:当前值
    writable:是否可以修改
    configurable:能否使用delete删除属性
    enumerable:是否能通过for in循环
const desc = Object.getOwnPropertyDescriptors(obj)
console.log(desc);

  

Reflect.defineProperty可以设置对象这四个属性
Reflect.defineProperty(obj, 'name', {
value: '李四',
writable: true,
configurable: true,
enumerable: true,
})

  

 

ES6-11学习笔记--对象的扩展的更多相关文章

  1. js-ES6学习笔记-对象的扩展

    1.ES6允许直接写入变量和函数,作为对象的属性和方法.这种写法用于函数的返回值,将会非常方便.CommonJS模块输出变量,就非常合适使用简洁写法. var ms = {}; function ge ...

  2. C++11 学习笔记 std::function和bind绑定器

    C++11 学习笔记 std::function和bind绑定器 一.std::function C++中的可调用对象虽然具有比较统一操作形式(除了类成员指针之外,都是后面加括号进行调用),但定义方法 ...

  3. ES6中数组和对象的扩展运算符拷贝问题以及常用的深浅拷贝方法

    在ES6中新增了扩展运算符可以对数组和对象进行操作.有时候会遇到数组和对象的拷贝,可能会用到扩展运算符.那么这个扩展运算符到底是深拷贝还是浅拷贝呢? 一..使用扩展运算符拷贝 首先是下面的代码. le ...

  4. C++11学习笔记

    C++11 1.long long新类型 2.列表初始化 int t=0; int t={0}; int t(0); int t{0}; 注意:如果我们使用列表初始化有丢失信息的风险,则编译器报错 l ...

  5. JavaScript学习笔记-对象

    枚举对象的属性:通常用for(...in...)来循环遍历,由于 for in 总是要遍历整个原型链,因此如果一个对象的继承层次太深的话会影响性能 for(var i in foo){ if(foo. ...

  6. ES6(vue)对象词法扩展

    ES6 允许声明在对象字面量时使用简写语法,来初始化属性变量和函数的定义方法,并且允许在对象属性中进行计算操作: function getCar(make, model, value) { retur ...

  7. ES6学习笔记(二)——字符串扩展

    相信很多人也和我一样,不喜欢这样循规蹈矩的逐条去学习语法,很枯燥乏味.主要是这样学完一遍之后,没过一段时间就忘到九霄云外了.不如实际用到的时候研究它记得牢靠,所以我就整理成笔记,加深记忆的同时便于复习 ...

  8. ES6 - 基础学习(6): 对象扩展

    对象对于JavaScript至关重要,在ES6中对象又加了很多新特性. 对象字面量:属性的简洁表示法 ES6允许对象的属性直接写变量,这时候属性名是变量名,属性值是变量值. let attr1 = & ...

  9. JavaScript(ES6)学习笔记-Set和Map与数组和对象的比较(二)

    一.Map,Set,Array对比: 1.增 let map = new Map(); let set = new Set(); let array = []; map.set('t',1); //M ...

随机推荐

  1. c# 通过HttpListener创建HTTP服务

    在c#中可以利用HttpListener来自定义创建HTTP服务,通过http协议进行服务端与多个客户端之间的信息传递,并且可以做成windows系统服务,而不用寄宿在IIS上.以下为一个demo,分 ...

  2. SAPD:FSAF升级版,合理的损失值加权以及金字塔特征选择 | ECCV 2020

    针对anchor-point检测算法的优化问题,论文提出了SAPD方法,对不同位置的anchor point使用不同的损失权重,并且对不同的特征金字塔层进行加权共同训练,去除了大部分人为制定的规则,更 ...

  3. 制作CocoaPods公有库和私有库

    认识公有库和私有库 公有库:开源自己封装的库供别人使用,且往cocoaPods的官方Repo仓库(即CocoaPods Master Repo)中新增自己库的索引,该库索引是以*.podspec.js ...

  4. javascript订阅模式浅析和基础实例

    前言 最近在开发redux或者vux的时候,状态管理当中的createStore,以及我们在组件中调用的dispatch传递消息给状态管理中心,去处理一些操作的时候,有些类似我们常见到订阅模式 于是写 ...

  5. 1251-Client does not support authentication protocol requested by server; consider upgrading MySQL client。

    三:出现的一个错误在安装完MySQL的时候,我们现在一般都使用Navicat来连接数据库,可惜出现下面的错误:1251-Client does not support authentication p ...

  6. Docker-compose 搭建 Harbor私有仓库

    一. 安装docker-compose 1. 下载docker-compose的最新版本 curl -L "https://github.com/docker/compose/release ...

  7. Python 基础知识自检,离深入掌握 Python 还有多远

    1. 模块化编程思想 模块化编程是 Python 的基本思想.初学 Python,都应该使用过小海龟.随机.数学模块.使用模块之前,需要导入模块,然后根据自己的问题需要使用这些模块. Python 提 ...

  8. RESTful API设计规范总结

    RESTful 是目前最流行的 API 设计规范,用于 Web 数据接口的设计. 它的大原则容易把握,但是细节不容易做对.本文总结 RESTful 的设计细节,介绍如何设计出易于理解和使用的 API. ...

  9. SpringCloudAlibaba 微服务讲解(二)微服务环境搭建

    微服务环境搭建 我们这次是使用的电商项目的商品.订单.用户为案例进行讲解 2.1 案例准备 2.1.1 技术选型 maven :3.3.9 数据库:mysql 持久层:SpringData JPA S ...

  10. Java IO流处理

    字节流是由字节组成的;字符流是由字符组成的Java里字符由两个字节组成. 1字符=2字节JAVA中的字节流是采用ASCII编码的,字符流是采用好似UTF编码,支持中文的 Java IO流处理 面试题汇 ...