ES6 对象扩展:对象简写,对象属性 表达式,扩展运算符 ...,Object.assign,Object.is,用法和应用场景

server/2025/2/7 10:05:36/

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.ppmy.cn/server/165649.html

相关文章

visual studio安装

一、下载Visual Studio 访问Visual Studio官方网站。下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux 在主页上找到并点击“下载 Visual Studio”按钮。 选择适合需求的版本&#xff0c;例如“Visual Studio Community”&#xff08;免费版本&#xff09;&#x…

Clion开发STM32时使用stlink下载程序与Debug调试

一、下载程序 先创建一个文件夹&#xff1a; 命名&#xff1a;stlink.cfg 写入以下代码: # choose st-link/j-link/dap-link etc. #adapter driver cmsis-dap #transport select swdsource [find interface/stlink.cfg]transport select hla_swdsource [find target/stm32f4x.…

零碎的知识点(十二):“期望” 是什么?

“期望” 是什么&#xff1f; 期望&#xff08;数学期望&#xff09;的详细解释与示例1. 期望的定义2. 期望的意义 3. 计算步骤与示例示例1&#xff1a;掷骰子的期望示例2&#xff1a;抽奖活动的期望收益示例3&#xff1a;投资决策的期望回报 4. 期望的性质5. 期望的常见误区6.…

【Golang学习之旅】Go 语言数据类型详解(string、slice、map等)

文章目录 前言1. Go语言数据类型概览2. Go语言基本数据类型2.1 整型&#xff08;int&#xff0c;uint&#xff0c;float&#xff09;2.2 布尔类型&#xff08;bool&#xff09;2.3 字符串&#xff08;string&#xff09; 3. Go 语言复合数据类型3.1 数组&#xff08;Array&…

go-zero学习笔记(四)

在api中访问rpc服务 必备条件 api端&#xff08;客户端&#xff09;有rpc端的pb文件&#xff0c;以及客户端文件&#xff08;非必要&#xff09;&#xff0c;且已知rpc端的服务注册方式&#xff08;etcd、k8s&#xff09;及地址&#xff0c;端口等 api端配置文件编写 # 新增如…

【探商宝】DeepSeek 最新模型对 ChatGPT 的影响及行业新变革

在人工智能领域的激烈竞争中&#xff0c;DeepSeek 发布的最新模型无疑给 ChatGPT 带来了巨大的冲击&#xff0c;同时也促使整个行业出现了一系列引人注目的变化&#xff0c;如 ChatGPT 的降价以及搜索功能无需登录即可使用等。 一、DeepSeek 最新模型的技术优势 架构创新与效…

React 第二十二节 useSyncExternalStore Hook 常见问题及用法详解

1、概述 在React 中我们通常会使用 useState useReducer 进行数据状态更新&#xff0c;但是当我们需要对外部的数据状态进行处理时候&#xff0c;我们需要使用React 提供的新Hook&#xff0c;useSyncExternalStore 让我们可以在React 内部订阅外部数据属性的状态&#xff0c;当…

最大值的期望 与 期望的最大值

期望的最大值与最大值的期望 先上结论: m a x i E [ X i ] ≠ E [ m a x i X i ] max_i \mathbb{E}[X_i]\neq \mathbb{E}[max_i X_i] maxi​E[Xi​]E[maxi​Xi​] 情况一&#xff1a;最大值和数学期望都关于自变量 i i i 在这种情况下&#xff0c;最大值与期望都依赖于同一…