# 对象扩展
1.对象简写
```javascript
/*
1.对象内key value相同时,可以 直接简写为 key, 等同于 key:'key'
2.对象内方法简写 , 去除function关键字, 去除冒号, 如下示例
3.key, 属性名以表达式书写
*/
let obj = {
a:'a',
b:function(){
console.log('it\'s es5~!')
},
}
let a = 'memeda',
b = 'clouds'
let obj = {
a,
b(){
console.log(`it's es6~!`)
},
[b+a]: 'handsome!'
}
console.log(obj[b+a]) /* key is cloudsmemeda res:handsome! */
```
2.Object方法扩展
```javascript
/*
1.Object.is() 判断两个值是否严格相等
2.Object.assign() 实现对某个对象的浅拷贝
*/
/* Object.is() 解决es5无法正确判断的问题,需要两个参数 */
+0 === -0; // true
NaN === NaN; // false
Object.is(+0, -0); // false
Object.is(NaN, NaN); // true
/* Object.assign()
1. 将源对象的所有可枚举属性复制到目标对象上(target)。
2. 第一个参数是目标对象
3. 后面可以跟无限个对象作为拷贝源
4.(
> 如果是非对象会先被转成对象,
> 如果是 null 或 undefined 则会报错。
> 如果存在对象key同名的情况参数排列中靠后的对象会覆盖前面的
)
*/
let target = { x: 1};
let s1 = { y: 2 };
let s2 = { z: 3 };
Object.assign(target, s1, s2) /* {x: 1, y: 2, z: 3} */
/* 使用场景:
1).给对象添加属性
2).给对象添加方法
3).克隆对象
4).合并对象
5).为属性指定默认值
*/
class Foo {
constructor(x, y) {
Object.assign(this, x, y);
}
}
Object.assig(SomeClass.prototype, {
someMethod(arg1, arg2) { ... },
anotherMethod() { ... }
})
function clone(originObj) {
return Object.assign({}, originObj); // 将原始对象复制给空对象
}
const mergeObjs = {
(target, ...sources) => Object.assign(target, ...sources);
}
const DEFAULTS = {
id: 'clouds',
};
let newobject = Object.assign({}, DEFAULTS);
```
3.对象遍历
> (1)首先遍历所有属性名为数值的属性,按数字排序;
(2)其次遍历所有属性名为字符串的属性,按照生成时间排序;
(3)最后遍历所有属性名为 Symbol 的属性,按照生成时间排序。
```javascript
/*
1.Object.getOwnPropertySymbols(obj) 返回该对象的所有symbol属性(非常用)
2.Object.ownKeys(obj) 返回该对象所有自身属性的数组(不包含继承来的)
3.Object.keys(),Object.values(),Object.entries()
遍历某个对象并以数组的形式 分别返回 对象的key, 对象的值, 以及包含对象键值的二维数组
*/
```
- 01.let-const
- 02.对象数组解构&赋值
- 03.字符串扩展,数值扩展,数组扩展
- 04.数组扩展
- 05.对象扩展
- 06.06.Symbol原始数据类型
- 07.set数据结构
- 08.map数据结构
- 09.proxy与Reflect
- 10.类
- 11.Promise
- 12.Iterator(迭代器)
- 13.Generator(生成器)
- 14.module与模块化
- 15.es6学习总结
- 记录- Vue拖拽实例
- 记录-git使用天坑之分支切换
- node -- session & cookie & localStorge
- 18.12关于前端战略技术储备与问题反馈
- Vue组件通信方式总结以及遇到的问题
- 01.版本回溯以及文件修改
- 02.远端控制
- 03.分支管理
- node 入门 留言板
- nodejs模块与 commonjs 规范
- 19年技术发展规划
- JS错误处理 -> 提升程序健壮性
- Git 基本使用
- 18年年终总结