ES6 對象擴展:對象簡寫,對象屬性 表達式,擴展運算符 ...,Object.assign,Object.is,用法和應用場景

1. 對象屬性簡寫

1.1 基本語法

// 傳統寫法
const name = 'John';
const age = 25;
const user = {name: name,age: age
};// ES6 簡寫語法
const user = {name,age
};

1.2 實際應用場景

// 1. 函數返回對象
function createUser(name, age, email) {return {name,age,email};
}// 2. React 組件狀態
function useState(initialState) {const state = initialState;const setState = (newState) => {// 更新邏輯};return { state, setState };
}// 3. 模塊導出
const actions = {increment,decrement,reset
};
export default actions;

2. 對象屬性表達式

2.1 基本語法

const prefix = 'user';
const id = 1;// 計算屬性名
const user = {[`${prefix}_${id}`]: 'John',[`${prefix}Email`]: 'john@example.com'
};console.log(user.user_1); // 'John'
console.log(user.userEmail); // 'john@example.com'

2.2 實際應用場景

// 1. 動態鍵名對象
function createStyles(theme) {return {[`button_${theme}`]: {backgroundColor: theme === 'dark' ? '#000' : '#fff',color: theme === 'dark' ? '#fff' : '#000'}};
}// 2. Redux action types
const actionTypes = {[`FETCH_USER_${status}`]: `FETCH_USER_${status}`,[`UPDATE_USER_${status}`]: `UPDATE_USER_${status}`
};// 3. 國際化鍵值對
const i18n = {[`greeting_${language}`]: '你好',[`farewell_${language}`]: '再見'
};

3. 擴展運算符 (…)

3.1 對象展開

// 基本用法
const base = { a: 1, b: 2 };
const extended = { ...base, c: 3 };
console.log(extended); // { a: 1, b: 2, c: 3 }// 對象合并
const defaults = { theme: 'light', language: 'en' };
const userPreferences = { theme: 'dark' };
const finalPreferences = { ...defaults, ...userPreferences };
console.log(finalPreferences); // { theme: 'dark', language: 'en' }

3.2 實際應用場景

// 1. React 組件屬性傳遞
function Button({ children, ...props }) {return (<button {...props}>{children}</button>);
}// 2. 配置合并
const baseConfig = {api: 'https://api.example.com',timeout: 5000
};const devConfig = {...baseConfig,api: 'http://localhost:3000'
};// 3. 狀態更新
setState(prevState => ({...prevState,loading: false,data: newData
}));

4. Object.assign()

4.1 基本用法

// 對象合并
const target = { a: 1 };
const source1 = { b: 2 };
const source2 = { c: 3 };const result = Object.assign(target, source1, source2);
console.log(result); // { a: 1, b: 2, c: 3 }
console.log(target); // { a: 1, b: 2, c: 3 } - 目標對象被修改

4.2 實際應用場景

// 1. 創建對象的淺拷貝
const original = { a: 1, b: { c: 2 } };
const copy = Object.assign({}, original);// 2. 合并默認配置
function createConfig(options) {const defaults = {debug: false,timeout: 5000,retries: 3};return Object.assign({}, defaults, options);
}// 3. 不可變狀態更新
const state = { user: { name: 'John' }, theme: 'light' };
const newState = Object.assign({}, state, { theme: 'dark' });

5. Object.is()

5.1 基本用法

// 比較值
console.log(Object.is(5, 5)); // true
console.log(Object.is(5, '5')); // false
console.log(Object.is(NaN, NaN)); // true
console.log(Object.is(+0, -0)); // false// 與 === 的區別
console.log(NaN === NaN); // false
console.log(Object.is(NaN, NaN)); // trueconsole.log(+0 === -0); // true
console.log(Object.is(+0, -0)); // false

5.2 實際應用場景

// 1. 精確的值比較
function areSameValues(x, y) {return Object.is(x, y);
}// 2. NaN 檢測
function isReallyNaN(x) {return Object.is(x, NaN);
}// 3. React 中的值比較
function shouldComponentUpdate(nextProps) {return !Object.is(this.props.value, nextProps.value);
}

6. 最佳實踐

6.1 選擇合適的方法

// 1. 簡單對象合并:使用擴展運算符
const merged = { ...obj1, ...obj2 };// 2. 需要深拷貝:使用其他方法
const deepCopy = JSON.parse(JSON.stringify(obj));// 3. 精確值比較:使用 Object.is()
if (Object.is(value1, value2)) {// 相等處理
}

6.2 性能考慮

// 1. 避免過深的對象展開
const obj = {...baseObj,...middlewareObj,...finalObj
};// 2. 使用 Object.assign 處理多個源對象
const result = Object.assign({}, baseConfig,environmentConfig,userConfig
);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/68048.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/68048.shtml
英文地址,請注明出處:http://en.pswp.cn/web/68048.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【2025】camunda API接口介紹以及REST接口使用(3)

前言 在前面的兩篇文章我們介紹了Camunda的web端和camunda-modeler的使用。這篇文章主要介紹camunda結合springboot進行使用&#xff0c;以及相關api介紹。 該專欄主要為介紹camunda的學習和使用 &#x1f345;【2024】Camunda常用功能基本詳細介紹和使用-下&#xff08;1&…

Java進階學習之路

Java進階之路 提示&#xff1a;這里可以添加系列文章的所有文章的目錄&#xff0c;目錄需要自己手動添加 提示&#xff1a;寫完文章后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 目錄 Java進階之路前言一、Java入門 Java基礎 1、Java概述 1.1 什…

JAVA安全—反射機制攻擊鏈類對象成員變量方法構造方法

前言 還是JAVA安全&#xff0c;哎&#xff0c;真的講不完&#xff0c;太多啦。 今天主要是講一下JAVA中的反射機制&#xff0c;因為反序列化的利用基本都是要用到這個反射機制&#xff0c;還有一些攻擊鏈條的構造&#xff0c;也會用到&#xff0c;所以就講一下。 什么是反射…

TfidfVectorizer

TF-IDF / Term Frequency - Inverse Document Frequency 作用&#xff1a;是自然語言處理NLP中常用的文本特征提取工具&#xff0c;用于將文本數據轉換為數據向量。 核心思想&#xff1a;是通過統計詞頻和逆文檔頻率來量化詞語在文本中的重要性。 T F ? I D F ( t , d ) T F…

DeepSeek-R1 論文解讀:強化學習如何 “煉” 出超強推理模型?

深度解析DeepSeek-R1&#xff1a;強化學習驅動大語言模型推理能力新突破 論文鏈接&#xff1a;DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 在大語言模型&#xff08;LLMs&#xff09;飛速發展的當下&#xff0c;提升模型推理能力成…

【數據結構】循環鏈表

循環鏈表 單鏈表局限性單向循環鏈表判斷鏈表是否有環思路code 找到鏈表入口思路代碼結構與邏輯 code 單鏈表局限性 單鏈表作為一種基本的數據結構&#xff0c;雖然在很多場景下都非常有用&#xff0c;但它也存在一些局限性&#xff1a; 單向訪問&#xff1a;由于每個節點僅包含…

ip屬地是手機號還是手機位置?一文理清

在數字化和網絡化的今天&#xff0c;IP屬地這一概念逐漸成為了人們關注的焦點。特別是在社交媒體和在線平臺上&#xff0c;IP屬地的顯示往往讓人聯想到用戶的地理位置。然而&#xff0c;關于IP屬地到底與手機號還是手機位置有關&#xff0c;卻存在著不少誤解和混淆。本文將深入…

【嵌入】基于nomic-embed-text-v1.5和HuggingFaceEmbeddings實現

測試代碼 model_name = /media/zhangbin/DATA/DataCache/nomic-ai/nomic-embed-text-v1.5import osos.environ[HF_HOME] = /media/zhangbin/DATA/DataCache/#os.environ["TRANSFORMERS_CACHE"] = "/media/zhangbin/DATA/DataCache/" # 確保目錄結構正確 if…

離散時間傅里葉變換(DTFT)公式詳解:周期性與連續性剖析

摘要 離散時間傅里葉變換&#xff08;DTFT&#xff09;是數字信號處理領域的重要工具&#xff0c;它能將離散時間信號從時域轉換到頻域&#xff0c;揭示信號的頻率特性。本文將深入解讀DTFT公式&#xff0c;詳細闡述其具有周期性和連續性的原因&#xff0c;幫助讀者全面理解DT…

哈希表與散列表的原理及C++實現

1. 什么是哈希表&#xff1f; 哈希表&#xff08;Hash Table&#xff09;是一種高效的數據結構&#xff0c;用于存儲鍵值對&#xff08;Key-Value Pairs&#xff09;。它通過哈希函數&#xff08;Hash Function&#xff09;將鍵&#xff08;Key&#xff09;映射到一個固定大小…

圖像分類與目標檢測算法

在計算機視覺領域&#xff0c;圖像分類與目標檢測是兩項至關重要的技術。它們通過對圖像進行深入解析和理解&#xff0c;為各種應用場景提供了強大的支持。本文將詳細介紹這兩項技術的算法原理、技術進展以及當前的落地應用。 一、圖像分類算法 圖像分類是指將輸入的圖像劃分為…

前端框架中 HTML 的應用技巧:React、Vue、Angular 深度解析

系列文章目錄 01-從零開始學 HTML&#xff1a;構建網頁的基本框架與技巧 02-HTML常見文本標簽解析&#xff1a;從基礎到進階的全面指南 03-HTML從入門到精通&#xff1a;鏈接與圖像標簽全解析 04-HTML 列表標簽全解析&#xff1a;無序與有序列表的深度應用 05-HTML表格標簽全面…

Vue - customRef 自定義ref

customRef 作用&#xff1a;創建一個自定義的 ref , 并對其依賴項跟蹤和更新觸發進行邏輯控制。 在原生 ref 的基礎上&#xff0c;添加自己的邏輯等... 在 Vue 3 中&#xff0c;customRef 是一個用于創建自定義響應式引用的 API。它允許開發者控制和優化響應式引用的行為&…

數字化轉型:概念性名詞淺談(第四講)

?大家好&#xff0c;本篇文章是在新年之際寫的&#xff0c;所以在這里先給大家拜個年。 今天要介紹的名詞為ETL: ETL&#xff0c;是英文Extract-Transform-Load的縮寫&#xff0c;用來描述將數據從來源端經過抽取&#xff08;extract&#xff09;、轉換&#xff08;transfor…

UE學習日志#22 C++筆記#8 基礎復習8 string和string_view2

1 std::string_view類 string_view基本上就是const string&的簡單替代品&#xff0c;但不會產生開銷。他不復制字符串。 string_view添加了remove_prefix(size_t)和remove_suffix(size_t)方法&#xff0c;前者將起始指針給定的偏移量來收縮字符串&#xff0c;后者則將結尾指…

UVM factory機制

目錄 1. factory-register 1.1 uvm_object_registry#(type T=uvm_object, string Tname="") 1.1 uvm_default_factory::register 2. factory-override 2.1 set_type_override(uvm_object_wrapper override_type) 2.2 set_inst_override(uvm_object_wrapper ove…

Spring MVC學習——發送請求(@RequestMapping注解及請求參數綁定)

前言 Spring MVC作為Spring框架中的核心組件之一&#xff0c;其強大的功能在于能簡潔高效地處理HTTP請求和響應。在開發Web應用時&#xff0c;理解和正確使用Spring MVC的注解&#xff0c;尤其是RequestMapping注解&#xff0c;至關重要。本文將詳細講解RequestMapping注解的使…

C# Action和 Func的用法

C#中的數據類型 函數數據類型 Action 是一個數據類型 但是是沒有返回值得函數數據類型 Func 用于指定一個有返回值的委托 internal class Program{static void Main(string[] args){TT.F1(NoVoid);TT.F2(Void1);Void2(() > { Console.WriteLine("Void2執行了");…

C++中的模板(上)

C中的模板(上) 模板參數和函數參數是很像的,函數參數定義的形參對象,而模板參數定義的是類型. 模板分為函數模板和類模板 函數模板 一個交換兩個數的函數模板: template<class T> // 此處typename和class是等價的 void Swap(T &a, T &b) {T temp a;a b;b …

MySQL面試題----如何進行 MySQL 數據庫備份與恢復

MySQL 數據庫備份 1. 使用 mysqldump 工具(邏輯備份) 全量數據庫備份 該方式會備份指定數據庫中的所有數據和表結構。在命令行中輸入以下命令,將 username 替換為你的 MySQL 用戶名,password 替換為對應的密碼,database_name 替換為要備份的數據庫名,backup.sql 為備份文…