我正在打电话给return someArr[someArr.push(newItem)-1];
,它确实应有的作用。
想知道该极其常见操作是否有句法“糖”?我想知道,因为返回的新length
确实比实际构造的对象(调用者可能确实想对之进行构造)要少得多。还是这样做是因为它实际上将返回“对象的副本”,而我对其字段的编辑在实际树中“将无法生存”?
就像JS <= 1.2一样:return someArr.push(newItem);
只想知道-是否有我不知道的新的“替换”方法?
我还有一个次要的子问题“返回对象的“独立”副本或对实际对象的“引用”吗?” ,但fiddle简单@PatricRoberts }刚刚发现它实际上是一个参考(正如预期的那样),所以我感谢他的帮助!
答案 0 :(得分:7)
您可以使用comma operator:
逗号运算符计算每个操作数(从左到右)并返回最后一个操作数的值。
赞:
return (someArr.push(newItem), newItem)
这等效于:
someArr.push(newItem);
return newItem
答案 1 :(得分:7)
您也可以使用logical and (&&)来做到这一点。
return someArr.push(newItem) && newItem;
由于在推送后数组长度将为正,因此将评估最右边的表达式并返回其值。
这种语法比@adiga使用逗号运算符的答案还不清楚。
但是,我个人更喜欢将新项目退回新行,以使其更具可读性:
someArr.push(newItem);
return newItem;
答案 2 :(得分:2)
您可以通过将赋值返回当前.length
的索引来实现。
return someArr[someArr.length] = newItem;
分配的结果是要分配的项目,因此将返回该结果。
分配给数组的当前.length
会自动扩展它。请注意,分配给任何比当前.length
高的索引将在数组中留下漏洞。