属性简洁表示法
属性名表达式
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. vue--加载模块详解

    1.postcss-loader.autoprefixer.css-loader .sass-loader:加载css模块及css预处理模块,添加浏览器前缀到CSS内容里 加载模块:npm insta ...

  2. JZ-027-字符串的排列

    字符串的排列 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和c ...

  3. LeetCode-057-插入区间

    插入区间 题目描述:给你一个 无重叠的 ,按照区间起始端点排序的区间列表. 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间). 示例说明请见LeetCo ...

  4. Laravel自定义错误提示,自定义异常类提示,自定义错误返回信息,自定义错误页面

    方法一 新增CustomException.php文件 App\Exceptions\CustomException.php <?php namespace App\Exceptions; us ...

  5. Linux——vi命令详解

    转载 Linux--vi命令详解   原文链接:https://blog.csdn.net/cyl101816/article/details/82026678 vi编辑器是所有Unix及Linux系 ...

  6. LGP4001题解

    题目大意 给定一张无向图,需要消耗代价才能使一条边被[数据删除],求使这张图不连通的最小代价. 一看就是最小割的应用啊... 从 \(u\) 到 \(v\),边权为 \(w\) 的边,建两条:一条从 ...

  7. 前端—我的第一篇博客 梦开始的地方(面向对象版tab栏)

    这是我的第一篇博客 博客生涯才开始 但是人生已经过去了二十个年头了 才开始弄这个 也没搞得太懂 我原本的想法是想搞个源代码上来 但是看了半天好像就只能传html源代码 那我还有css js的部分呢 我 ...

  8. Redis 大 key 问题总结

    多大的 key 算大? 阿里云Redis 最佳实践中提到 合理的 Key 中 Value 的字节大小,推荐小于10 KB.过大的 Value 会引发数据倾斜.热点Key.实例流量或 CPU 性能被占满 ...

  9. 数据库常用的sql语句大全--sql

    前言 本片博客使用mysql数据库进行数据操作,使用Navicat for mysql 这个IDE进行可视化操作.每个SQL语句都是亲身实验验证的,并且经过自己的思考的.能够保证sql语句的可运行性. ...

  10. Docker——概述

    出现原因:开发接替运维的工作,将jar包连同(mysql,jdk)等环境上线 实现:java -> jar(环境) -> 打包项目带上环境(镜像) -> (Docker仓库:商店) ...