# 對象擴展
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年年終總結