ES6對象簡潔語法

来源:https://www.cnblogs.com/jxjy/archive/2019/10/30/11764982.html
-Advertisement-
Play Games

對象(object)是 JavaScript 最重要的數據結構。ES6 對它進行了重大升級,本章介紹數據結構本身的改變及語法應用細節。 ...


對象(object)是 JavaScript 最重要的數據結構。ES6 對它進行了重大升級,本章介紹數據結構本身的改變及語法應用細節。

1.屬性的簡潔表示法
◆ ES6 允許直接寫入變數和函數,作為對象的屬性和方法。這樣的書寫更加簡潔。
const foo = 'bar';
const baz = {foo};
baz // {foo: "bar"}
// 等同於
const baz = {foo: foo};

◆ ES6 允許在對象之中,直接寫變數。這時,屬性名為變數名, 屬性值為變數的值。
function f(x, y) {
return {x, y};
}
// 等同於
function f(x, y) {
return {x: x, y: y};
}
f(1, 2) // Object {x: 1, y: 2}

◆ 除了屬性簡寫,方法也可以簡寫。
const o = {
method() {
return "Hello!";
}
};
// 等同於
const o = {
method: function() {
return "Hello!";
}
};

如:
let birth = '2000/01/01';
const Person = {
name: '張三',
birth, //等同於birth: birth[重要]
hello() { console.log('我的名字是', this.name); } // 等同於hello: function ()...
};

這種寫法用於函數的返回值,非常方便。
function getPoint() {
const x = 1;
const y = 10;
return {x, y};
}
getPoint() // {x:1, y:10}

◆ CommonJS 模塊輸出一組變數,就非常合適使用簡潔寫法
let ms = {};
function getItem (key) {
return key in ms ? ms[key] : null;
}
function setItem (key, value) {
ms[key] = value;
}
function clear () {
ms = {};
}
module.exports = { getItem, setItem, clear };
// 等同於
module.exports = {
getItem: getItem,
setItem: setItem,
clear: clear
};

◆ 註意,簡潔寫法的屬性名總是字元串,這會導致一些看上去比較奇怪的結果。
const obj = {
class () {}
};
// 等同於
var obj = {
'class': function() {}
};

2.屬性名錶達式
JavaScript 定義對象的屬性,有兩種方法。
// 方法一
obj.foo = true;
// 方法二
obj['a' + 'bc'] = 123;
上面代碼的方法一是直接用標識符作為屬性名,方法二是用表達式作為屬性名,這時要將表達式放在方括弧之內。
但如果使用字面量方式定義對象(使用大括弧),在 ES5 中只能使用方法一(標識符)定義屬性。
var obj = {
foo: true,
abc: 123
};
ES6 允許字面量定義對象時,用方法二(表達式)作為對象的屬性名,即把表達式放在方括弧內。
let propKey = 'foo';
let obj = {
[propKey]: true,
['a' + 'bc']: 123
};

下麵是另一個例子。
let lastWord = 'last word';

const a = {
'first word': 'hello',
[lastWord]: 'world'
};
a['first word'] // "hello"
a[lastWord] // "world"
a['last word'] // "world"

◆ 表達式還可以用於定義方法名。
let obj = {
['h' + 'ello']() {
return 'hi';
}
};
obj.hello() // hi
註意,屬性名錶達式與簡潔表示法,不能同時使用,會報錯。
// 報錯
const foo = 'bar';
const bar = 'abc';
const baz = { [foo] };
// 正確
const foo = 'bar';
const baz = { [foo]: 'abc'};
註意,屬性名錶達式如果是一個對象,預設情況下會自動將對象轉為字元串[object Object],這一點要特別小心。

3.方法的 name 屬性
函數的name屬性,返回函數名。對象方法也是函數,因此也有name屬性。
const person = {
sayName() {
console.log('hello!');
},
};
person.sayName.name // "sayName"
上面代碼中,方法的name屬性返回函數名(即方法名)。

4.對象的擴展運算符
A.解構賦值
對象的解構賦值用於從一個對象取值,相當於將目標對象自身的所有可遍歷的(enumerable)、但尚未被讀取的屬性,分配到指定的對象上面。所有的鍵和它們的值,都會拷貝到新對象上面。
let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
x // 1
y // 2
z // { a: 3, b: 4 }
解析:變數z是解構賦值所在的對象。它獲取等號右邊的所有尚未讀取的鍵(a和b),將它們連同值一起拷貝過來。
註意事項:
1.解構賦值要求等號右邊是一個對象,所以如果等號右邊是undefined或null,就會報錯,因為它們無法轉為對象。
let { ...z } = null; // 運行時錯誤
let { ...z } = undefined; // 運行時錯誤

2.解構賦值必須是最後一個參數,否則會報錯
let { ...x, y, z } = someObject; // 語法錯誤
let { x, ...y, ...z } = someObject; // 語法錯誤

B.擴展運算符
對象的擴展運算符(...)用於取出參數對象的所有可遍歷屬性,拷貝到當前對象之中。
let z = { a: 3, b: 4 };
let n = { ...z };
n // { a: 3, b: 4 }

由於數組是特殊的對象,所以對象的擴展運算符也可以用於數組。
let foo = { ...['a', 'b', 'c'] };
foo // {0: "a", 1: "b", 2: "c"}

如果擴展運算符後面是一個空對象,則沒有任何效果。
{...{}, a: 1} // { a: 1 }

如果擴展運算符後面不是對象,則會自動將其轉為對象。
// 等同於 {...Object(1)}
{...1}
// {}擴展運算符後面是整數1,會自動轉為數值的包裝對象Number{1}。由於該對象沒有自身屬性,所以返回一個空對象

5 對象的新增語法
01 Object.is
用來比較兩個值是否嚴格相等,與嚴格比較運算符(===)的行為基本一致。
123==“123” //true
123===“123” //false
Console.log(Object.is(123,”123”)) // false

02 Object. assign
Object.assign用來合併對象
//let 新的對象 = Object.assign(目標對象, source1, srouce2....)
03 Object. Keys/values/entries
`Object.keys()`:返回對象自身的所有可枚舉的屬性的鍵名。
Object.values()`:返回對象自身的所有可枚舉的屬性的值
Object. entries ()`:返回對象自身的所有可枚舉的名、值對


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原始簡書文章地址(也是我自己的) 首先聲明,一我不負責涉及你們內部伺服器. 二是好好讀文章,別人能過,你們也能過 蘋果6月1日出的IPV6協議阻礙了國內大多數積極開發者,我司也不外乎,經過三次被拒後,遂在網上查找關於IPV6審核的相關事宜,怪我年少無知以為這種開源協議的東西應該是免費的,當然,我說的 ...
  • 一、浮動元素的字圍現象 我們可以看到​這裡的是:浮動+非浮動的模式,那麼這裡的浮動標簽就把非浮動的蓋住了一部分,有趣的是非浮動的裡面有文字,這裡面的文字就圍繞在了這個浮動標簽的周圍,這就是浮動的字圍效果,這裡可應用到圖文混排​。 二、我們做一次浮動的練習 註意:我們進行設計頁面的時候,通常在垂直方向 ...
  • CSS語法規範 1. CSS規則由兩個主要的部分構成:選擇器以及一條或多條聲明。 ~~~ p{ color: red; font size: 12px; } ~~~ CSS代碼風格 1. 樣式格式書寫 緊湊格式 ~~~ h3 {color: deeppink;font size:20px} ~~~ ...
  • 詞性說明 n :名詞 v : 動詞 vi :非及物動詞 vt :及物動詞 conj :連詞 prep :介詞 pron :代詞 adj :形容詞 adv :副詞 音頻 "0 100單詞點我" " 100 200單詞點我" "200 300單詞點我" 電腦專用英語辭彙常用單詞 file n.文件;v ...
  • axios學習筆記defaults(預設配置)和mergeConfig(合併config方法) "源碼地址" 找到入口文件 axios/lib/axios.js ... var mergeConfig = require('./core/mergeConfig');` var defaults = ...
  • 前段時間做了一個“國外的公眾號”,為什麼說是國外的公眾號呢,因為他和微信的公眾號有很多共通之處。當然了也有很多不同的地方,第一個要說的就是,我在列印信息的時候,使用的alert()彈窗,但是後臺才發現,LINE中的彈窗中的內容是不能用逗號分隔的。請看下麵的代碼: 在LINE中就只能列印個1,然後後面 ...
  • 序言 隨著用戶量越來越多,業務方關於用戶體驗的要求也在不斷提高,首屏渲染時間就成為了一個提高用戶體驗的指標,減少用戶等待的時間,在一定程度上就會提高用戶的留存。 頁面載入渲染是怎樣的一個過程 參考自Chrome的First Paint Send Request:表示給這個外鏈對應的伺服器發送請求 R ...
  • 在說虛擬DOM之前,先來一個引子,從輸入url到展現出整個頁面都有哪些過程? 1、輸入網址 2、DNS解析 3、建立tcp連接 4、客戶端發送HTPP請求 5、伺服器處理請求 6、伺服器響應請求 7、瀏覽器展示HTML 8、瀏覽器發送請求獲取其他在HTML中的資源。 其中瀏覽器展示HTML經過了:構 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...