
在我们的日常开发过程中,我们经常会遇到数字与字符串转换,检查对象中是否存在对应值,条件性操作对象数据,过滤数组中的错误值,等等这类处理。
在这里,整理出了一些常用的小技巧,这些技巧是我比较喜欢的 ❤️,可以使我们的代码更精简、更干净,且非常实用。
- 通过条件判断向对象添加属性
1 2 3 4 5 6 7 8 9 10 11 12
| const isValid = false; const age = 18;
const person = { id: 'ak001', name: 'ak47', ...(isValid && {isActive: true}), ...((age > 18 || isValid) && {cart: 0}) }
console.log('person', person)
|
- 检查对象中是否存在某个属性
1 2 3 4 5 6 7
| const person = { id: 'ak001', name: 'ak47' }
console.log('name' in person); console.log('isActive' in person);
|
- 解构赋值
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const product = { id: 'ak001', name: 'ak47' }
const { name: weaponName } = product;
console.log('weaponName:', weaponName);
const extractKey = 'name'; const { [extractKey]: data } = product;
console.log('data:', data);
|
- 循环遍历一个对象的 key 和 value
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| const product = { id: 'ak001', name: 'ak47', isSale: false }
Object.entries(product).forEach(([key, value]) => { if(['id', 'name'].includes(key)) { console.log('key:',key, 'value:',value) } })
// key: id value: ak001 // key: name value: ak47
|
- 使用可选链(Optionalchaining)避免访问对象属性报错
1 2 3 4 5 6 7 8
| const product = { id: 'ak001', name: 'ak47' }
console.log(product.sale.isSale);
console.log(product?.sale?.isSale);
|
注意 ⚠️: 在实际使用场景中,有些场景对于我们要获取的属性是非必需的,我们可以通过上面这种方式去避免报错出现;但是有些场景下一些属性是必须的,不然就会影响我们的实际功能,这个时候还是尽量给出清晰的报错提示来解决这种错误的出现。
6.检查数组中 falsy 的值
1 2 3 4 5 6 7 8 9
| const fruitList = ['apple', null, 'banana', undefined];
const filterFruitList = fruitList.filter(Boolean); console.log('filterFruitList:', filterFruitList);
const isAnyFruit = fruitList.some(Boolean); console.log('isAnyFruit:', isAnyFruit);
|
7.数组去重
1 2 3 4
| const fruitList = ['apple', 'mango', 'banana', 'apple'];
const uniqList = [...new Set(fruitList)] console.log('uniqList:', uniqList); // uniqList: ['apple', 'mango', 'banana']
|
- 检查是否为数组类型
1 2 3 4
| const fruitList = ['apple', 'mango'];
console.log(typeof fruitList); console.log(Array.isArray(fruiltList));
|
9.数字&字符串类型转换
1 2 3 4 5 6 7
| const personId = '007'; console.log('personId:', +personId, 'type:', typeof +personId);
const personId = 119; console.log('personId:', personId + '', 'type:', typeof (personId + ''));
|
- 巧用空值合并(??)
1 2 3 4 5 6 7 8 9 10 11 12
| let data = undefined ?? 'noData; console.log('data:', data); // data: noData
data = null ?? 'noData'; console.log('data:', data); // data: noData
data = 0 ?? null ?? 'noData'; console.log('data:', data); // data: noData
// 当我们根据变量自身判断时 data ??= 'noData'; console.log('data:', data); // data: noData
|
和或(||) 运算符的区别?
或运算符针对的是 falsy 类的值 (0,’ ’, null, undefined, false, NaN),而空值合并仅针对 null 和 undefined 生效;
- 通过!!进行布尔转换
1 2 3 4 5
| console.log('this is not empty:', !!'') // this is not empty: false
console.log('this is not empty:', !!'Data') // this is not empty: true
|
最后,希望这些小小技巧能够帮助到大家的日常开发,如果大家有更好的方法也欢迎留言分享 😊