iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 18
0
Modern Web

從ES到ESNext - 30天輕鬆掌握ECMAScript系列 第 18

ES2017(ES8) - string、Object

  • 分享至 

  • xImage
  •  

本系列文章經過重新編排和擴充,已出書為ECMAScript關鍵30天。原始文章因當時準備時程緊迫,多少有些許錯誤。為了避免造成讀者的困擾,以及配合書籍的內容規劃,將會陸續更新本系列文章。
本篇文章在 2021/11/2 已更新。

字串

String.prototype.padStart(length,padString)

padString預設為 ' ' (空字串)。重複填充到字串的前面,直到到達指定的長度 length後回傳。如果 length 小於原來的字串長度,則回傳原字串。

"One Punch Man".padStart(20); // "       One Punch Man"
"One Punch Man".padStart(23, "-"); // "----------One Punch Man"

String.prototype.padEnd(length,padString)

padStart 相似,不過填充的位置為字串後方。

"One Punch Man".padEnd(20); // "One Punch Man       "
"One Punch Man".padEnd(23, "-"); // "One Punch Man----------"

以上兩種實體方法,主要目的為讓字串能有組成特定的長度,進行格式化。

物件

Day7有提到物件的迭代器。除了 Object.keys,在 ES2017 中有再擴充可以使用的方法。

  • Object.values: 依序將每個屬性的值存到陣列
  • Object.entries: 依序將每個屬性的名稱與值存到陣列 A,再把陣列 A 存到陣列 B
const object1 = {
  a: "somestring",
  b: 42,
};
Object.keys(object1); // ["a", "b"]
Object.values(object1); // ["somestring", 42]
Object.entries(object1); // [["a", "somestring"], ["b", 42]]

Object.getOwnPropertyDescriptors(target)

一次取得物件本身所有的屬性特徵。有關更多屬性特徵的介紹,可以參考ECMAScript關鍵30天

這個方法的主要目的是搭配Object.defineProperties ,來解決 Object.assign 無法正確複製 get & set 屬性的問題。

const obj1 = {
  set prop(v) {
    console.log(v);
  },
};
const obj2 = {};
Object.assign(obj2, obj1);
Object.getOwnPropertyDescriptor(obj2, "prop");
// {value: undefined, writable: true, enumerable: true, configurable: true}

如果使用 Object.getOwnPropertyDescriptors 的話,則可以取到 set

Object.defineProperties(obj2, Object.getOwnPropertyDescriptors(obj1));
Object.getOwnPropertyDescriptor(obj2, "prop");
// {get: undefined, enumerable: true, configurable: true, set: ƒ}

參考資源


上一篇
ES2017(ES8) - async / await
下一篇
ES2017(ES8) - 尾逗號
系列文
從ES到ESNext - 30天輕鬆掌握ECMAScript30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言