ES6中對象新增的方法

来源:https://www.cnblogs.com/IwishIcould/archive/2022/03/30/16065037.html
-Advertisement-
Play Games

屬性的簡潔表示法 ES6 允許在大括弧裡面直接寫入變數和函數,作為對象的屬性和方法。這樣的書寫更加簡潔。 const foo = 'bar'; const baz = { foo }; console.log(baz); // { foo: 'bar' } function f(name, age) ...


屬性的簡潔表示法

ES6 允許在大括弧裡面直接寫入變數和函數,作為對象的屬性和方法。這樣的書寫更加簡潔。
const foo = 'bar';
const baz = {
    foo
};
console.log(baz); // { foo: 'bar' }
function f(name, age) {
  return {
      name,
      age
  };
}

// 等同於
// function f(name, age) {
//     return {
//         name: name,
//         age: age
//     };
// }

console.log('信息', f('李四', 23));
// 輸出的信息是 {age: 23 name: "李四"}
let birth = '2022-3-27';
const Person = {
    name: '張三',
    //等同於birth: birth
    birth,
    // 等同於hello: function (){}
    hello() {
        console.log('我的名字叫:', this.name);
    }
};
// Person.hello(); // 我的名字叫:張三

//沒有返回值時,預設返回 undefined。下麵這一條語句會被執行兩次
console.log('信息', Person.hello());
// 第1次的值: 我的名字叫:張三
// 第2次的值: undefined
註意,簡寫的對象方法不能用作構造函數,會報錯。
let Person = {
  name: '張三',
  hello: function() {
    console.log('你好呀')
  },
  like() {
    console.log('簡寫的對象方法不能用作構造函數==>error會報錯')
  }
};
new Person.hello() // 不會報錯
new Person.like(); //會報錯

ES6對象屬性遍歷的5種方式

ES6 一共有 5 種方法可以遍歷對象的屬性。
1==>for...in
for...in迴圈遍歷對象自身的和繼承的可枚舉屬性(不含 Symbol 屬性)。

const obj = { h: 180,w: 125}
for (let keysName in obj) {
  console.log(keysName);
  // h w 輸出的是key值哈
}


2==>Object.keys(obj)
Object.keys返回一個數組,
包括對象自身的(不含繼承的)所有可枚舉屬性(不含 Symbol 屬性)的鍵名。
const obj = {
    height: 180,
    weight: 125,
}
console.log(Object.keys(obj)) //['height', 'weight']


3==>Object.getOwnPropertyNames(obj) 【瞭解即可】
Object.getOwnPropertyNames返回一個數組,
包含對象自身【所有的屬性】。[其自身的可枚舉和不可枚舉屬性的名稱被返回]
【不含 Symbol 屬性】的鍵名。
let obj = {};
let a = Symbol("a");
let b = Symbol.for("b");
obj[a] = "localSymbol";
obj[b] = "globalSymbol";
let objectSymbols = Object.getOwnPropertySymbols(obj);
console.log(objectSymbols.length); // 2
console.log(objectSymbols) // [Symbol(a), Symbol(b)]
console.log(objectSymbols[0]) // Symbol(a)

4==>Object.getOwnPropertySymbols(obj)
Object.getOwnPropertySymbols返回一個數組,包含對象自身的所有 Symbol 屬性的鍵名。


5==>Reflect.ownKeys(obj)
Reflect.ownKeys返回一個數組,包含對象自身的(不含繼承的)所有鍵名。
不管鍵名是 Symbol 或字元串,也不管是否可枚舉。
const obj = {
  height: 180,
  weight: 125,
}
console.log(Reflect.ownKeys(obj))
//['height', 'weight']

以上的 5 種方法遍歷對象的鍵名,都遵守同樣的屬性遍歷的次序規則。

JavaScript中的可枚舉屬性與不可枚舉屬性

在JavaScript中,對象的屬性分為可枚舉和不可枚舉之分,
它們是由屬性的 enumerable 值決定的。
可枚舉性決定了這個屬性能否被for…in查找遍歷到。

屬性的枚舉性會影響以下三個函數的結果:
for…in
Object.keys()
JSON.stringify

Object.is()

ES5 比較兩個值是否相等,只有兩個運算符。
相等運算符(==)和嚴格相等運算符(===)。
它們都有缺點,前者會自動轉換數據類型。
後者的NaN不等於自身,以及+0等於-0。
JavaScript 缺乏一種運算,只要兩個值是一樣的,它們就應該相等。
於是,ES6提出來了一種同值相等的演算法,來解決這個問題。
console.log('==>', Object.is('bar', 'bar'))
// true
console.log(Object.is({}, {}))
// false

+0 === -0 //true
NaN === NaN // false

Object.is(+0, -0) // false
Object.is(NaN, NaN) // true

Object.assign對象合併

Object.assign()方法用於對象的合併。
將源對象(source)的所有可枚舉屬性,複製到目標對象(target。

const target = { a: 1 };
const source1 = { b: 2 };
const source2 = { c: 3 ,b:22};
Object.assign(target, source1, source2);
target // {a:1, b:22, c:3}

Object.assign需要註意的點

需要註意的點:Object.assign()方法的第一個參數是目標對象,後面的參數都是源對象。
由於undefined和null無法轉成對象,所以如果它們作為參數,就會報錯。
Object.assign(undefined) // 報錯
Object.assign(null) // 報錯

如果非對象參數出現在源對象的位置即非首參數,
那麼處理規則有所不同。
首先,這些參數都會轉成對象,如果無法轉成對象,就會跳過。
這意味著,如果undefined和null不在首參數,就不會報錯。
let obj = {a: 1};
Object.assign(obj, undefined) === obj // true
Object.assign(obj, null) === obj // true

特別註意:其他類型的值(即數值、布爾值)不在首參數,也不會報錯。
但是,除了字元串會以數組形式,拷貝入目標對象。

-- 字元串會以數組形式拷貝入目標對象
const str1 = 'abc';
const obj = Object.assign({}, str1);
console.log(obj); // { "0": "a", "1": "b", "2": "c" }
為什麼字元串會以數組形式拷貝進入目標對象呢?
這是因為:只有字元串的包裝對象,會產生可枚舉屬性。

-- 數字不會拷入目標對象
const str2 = 123;
const obj = Object.assign({}, str2);
console.log(obj); // {}

-- 最後補充一點:
Object.assign()拷貝的屬性是有限制的,
只拷貝源對象的自身屬性(不拷貝繼承屬性),
也不拷貝不可枚舉的屬性(enumerable: false)。
Object.assign()方法實行的是淺拷貝,而不是深拷貝。

遇見問題,這是你成長的機會,如果你能夠解決,這就是收穫。

作者:明月人倚樓
出處:https://www.cnblogs.com/IwishIcould/

想問問題,打賞了卑微的博主,求求你備註一下的扣扣或者微信;這樣我好聯繫你;(っ•̀ω•́)っ✎⁾⁾!

如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,或者關註博主,在此感謝!

萬水千山總是情,打賞5毛買辣條行不行,所以如果你心情還比較高興,也是可以掃碼打賞博主(っ•̀ω•́)っ✎⁾⁾!

想問問題,打賞了卑微的博主,求求你備註一下的扣扣或者微信;這樣我好聯繫你;(っ•̀ω•́)っ✎⁾⁾!

支付寶 微信 本文版權歸作者所有,歡迎轉載,未經作者同意須保留此段聲明,在文章頁面明顯位置給出原文連接
如果文中有什麼錯誤,歡迎指出。以免更多的人被誤導。

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

-Advertisement-
Play Games
更多相關文章
  • ##數據分析 ###數據清洗:缺失值處理、1刪除記錄 2數據插補 3不處理 ###數據在https://book.tipdm.org/jc/219 中的資源包中數據和代碼chapter4\demo\data\catering_sale.xls ###常見插補方法 ####插值法-拉格朗日插值法 根據 ...
  • 本期我們給大家帶來的是“畫圖”應用開發者Rick的分享,希望能給你的HarmonyOS開發之旅帶來啟發~ ...
  • 在HarmonyOS中webview載入網頁的時候,需要有進度條,或者載入動畫進行用戶感知的交互,這樣可以優化用戶體驗,因此今天寫一篇載入動畫(效果如下)用於同學們進行學習,怎麼實現?首先我們需要學習“CommonDialog”“ WebView”“動畫開髮指導”三個知識儲備 我們分為“準備階段”, ...
  • 近日,HMS Core機器學習服務(ML Kit)文本翻譯功能在6.4.0版本更新中增加了10種小語種語言類型,分別是馬其他語、馬其頓、冰島、烏爾都語、波斯尼亞語、烏克蘭語、加泰羅尼亞語、斯洛維尼亞語、孟加拉語、南非荷蘭語。歡迎有相關出海App需求的開發者們訪問官網進一步瞭解,同時跟隨小編一起看看文 ...
  • 提到腳手架,大家想到的可能就是各種 xxx-cli,本文介紹的是另一種方式:以 vscode 插件的形式實現,提供 web 可視化操作,如下圖: 下麵介紹如何安裝使用,以及實現原理。 安裝使用 vscode 安裝 lowcode 插件,此插件是一個效率工具,腳手架只是其中一個功能,更多功能可以查看文 ...
  • 一、display:none; display翻譯成中文是顯示、展覽的意思;將display的屬性改為none可以實現元素的隱藏,元素和盒子模型也不生成,被隱藏的元素不占位置,看不見摸不著,它會導致瀏覽器的重排和重繪。 二、visibility:hidden; visibility翻譯成中文是能見、 ...
  • defer和async產生的原因 HTML 網頁中,瀏覽器通過<script>標簽載入 JavaScript 腳本。 <!-- 頁面內嵌的腳本 --> <script type="application/javascript"> // module code </script> <!-- 外部腳本 ...
  • 框架看起來就像是宗教(或者說是政治):每一個框架都假裝自己為開發者提供瞭解決方案,但每一個又都不一樣。它們每一個都聲稱可以為應用程式提供最好的前景,但關於哪一個真正名副其實的爭論又不絕於耳。每一個框架都要求你遵循特定的規則,它們之間可能有相似之處,但要從一個框架轉換到另一個框架總是很難。所以沒有什麼... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...