3 A" @6 \% N/ p( e9 N6 F
. x. O T/ `4 A. B3 _; p( y
吐槽获取对象的全部属性值还要遍历吗?Object.values忘记了吗?还有涉及到数组的扁平化处理,为啥不用ES6提供的flat方法呢,还好这次的数组的深度最多只到2维,还要是遇到4维、5维深度的数组,是不是得循环嵌套循环来扁平化?6 u2 O7 [! m O0 w
改进. x; Z# f: M) \! n4 j* [; g
const deps = {5 c1 e( m# S2 c& A) r9 M# M7 j7 U$ s& O* r
'采购部':[1,2,3], ) R M7 x" N: B, e0 ^' k' L& ?+ E
'人事部':[5,8,12],5 n& p; [' O! \! `2 I0 D! N1 S
'行政部':[5,14,79]," o# @% j. r9 C" q5 G3 S- S1 t
'运输部':[3,64,105],9 T- ~6 C5 t" t
}- P ? h' g8 U. W* F
let member = Object.values(deps).flat(Infinity);
复制代码
O! t! h3 U& a5 {其中使用Infinity作为flat的参数,使得无需知道被扁平化的数组的维度。补充flat方法不支持IE浏览器。七、关于获取对象属性值的吐槽const name = obj && obj.name;吐槽ES6中的可选链操作符会使用么?改进const name = obj?.name;八、关于添加对象属性的吐槽当给对象添加属性时,如果属性名是动态变化的,该怎么处理。let obj = {}; 6 k: b* A' f! p; p. r- [) S
let index = 1;1 i( u }- p1 P j$ {2 s* n
let key = `topic${index}`; : f6 _! c$ b7 l1 r! k9 J. Z" D
obj[key] = '话题内容';吐槽为何要额外创建一个变量。不知道ES6中的对象属性名是可以用表达式吗?改进let obj = {};6 ~6 C3 ^& V. Z' \$ O" U4 M
let index = 1; $ R( M6 S3 ^& |) B8 w
obj[`topic${index}`] = '话题内容';
复制代码
. L2 \( M7 u6 r+ v2 s( E
7 s6 y1 F6 Q. p, x九、关于输入框非空的判断在处理输入框相关业务时,往往会判断输入框未输入值的场景。if(value !== null && value !== undefined && value !== ''){ 3 R# _" K: E3 O //... 9 {3 K: r8 T. q2 G- u} % X: o H, _; j& K吐槽ES6中新出的空值合并运算符了解过吗,要写那么多条件吗?/ h, l" h% l0 o
if((value??'') !== ''){/ P4 X& s1 a/ b0 z6 G( ?$ N# G
//... 8 k/ |. L2 U# T$ H4 n' ]6 i}- f) d4 e3 ` e1 k6 {. ^$ U
十、关于异步函数的吐槽异步函数很常见,经常是用 Promise 来实现。 4 Z- ^$ j) U- {; H) r
const fn1 = () =>{ 9 S5 b9 ^* z$ p9 O* R! I% i, b J& D
return new Promise((resolve, reject) => { ! Z2 R! G* N \/ o$ g9 }; E