1. 对象属性简写
1.1 基本语法
const name = 'John';
const age = 25;
const user = {
name: name,
age: age
};
const user = {
name,
age
};
1.2 实际应用场景
function createUser(name, age, email) {
return {
name,
age,
email
};
}
function useState(initialState) {
const state = initialState;
const setState = (newState) => {
};
return { state, setState };
}
const actions = {
increment,
decrement,
reset
};
export default actions;
2. 对象属性表达式
2.1 基本语法
const prefix = 'user';
const id = 1;
const user = {
[`${prefix}_${id}`]: 'John',
[`${prefix}Email`]: '[email protected]'
};
console.log(user.user_1);
console.log(user.userEmail);
2.2 实际应用场景
function createStyles(theme) {
return {
[`button_${theme}`]: {
backgroundColor: theme === 'dark' ? '#000' : '#fff',
color: theme === 'dark' ? '#fff' : '#000'
}
};
}
const actionTypes = {
[`FETCH_USER_${status}`]: `FETCH_USER_${status}`,
[`UPDATE_USER_${status}`]: `UPDATE_USER_${status}`
};
const i18n = {
[`greeting_${language}`]: '你好',
[`farewell_${language}`]: '再见'
};
3. 扩展运算符 (…)
3.1 对象展开
const base = { a: 1, b: 2 };
const extended = { ...base, c: 3 };
console.log(extended);
const defaults = { theme: 'light', language: 'en' };
const userPreferences = { theme: 'dark' };
const finalPreferences = { ...defaults, ...userPreferences };
console.log(finalPreferences);
3.2 实际应用场景
function Button({ children, ...props }) {
return (
<button {...props}>
{children}
</button>
);
}
const baseConfig = {
api: 'https://api.example.com',
timeout: 5000
};
const devConfig = {
...baseConfig,
api: 'http://localhost:3000'
};
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);
console.log(target);
4.2 实际应用场景
const original = { a: 1, b: { c: 2 } };
const copy = Object.assign({}, original);
function createConfig(options) {
const defaults = {
debug: false,
timeout: 5000,
retries: 3
};
return Object.assign({}, defaults, options);
}
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));
console.log(Object.is(5, '5'));
console.log(Object.is(NaN, NaN));
console.log(Object.is(+0, -0));
console.log(NaN === NaN);
console.log(Object.is(NaN, NaN));
console.log(+0 === -0);
console.log(Object.is(+0, -0));
5.2 实际应用场景
function areSameValues(x, y) {
return Object.is(x, y);
}
function isReallyNaN(x) {
return Object.is(x, NaN);
}
function shouldComponentUpdate(nextProps) {
return !Object.is(this.props.value, nextProps.value);
}
6. 最佳实践
6.1 选择合适的方法
const merged = { ...obj1, ...obj2 };
const deepCopy = JSON.parse(JSON.stringify(obj));
if (Object.is(value1, value2)) {
}
6.2 性能考虑
const obj = {
...baseObj,
...middlewareObj,
...finalObj
};
const result = Object.assign({},
baseConfig,
environmentConfig,
userConfig
);