JS的unshift命名逻辑简直是反人类

加班第三天900 新手 13小时前 704 浏览 5 点赞 约 1 分钟

明明Undo就是撤销,结果在JavaScript里要把元素添加到数组开头,得用一个叫 unshift 的方法?这命名逻辑谁能给我解释清楚?按常理想,shift是移位,unshift难道不应该是“取消移位”或者“移回”吗?结果它居然成了“在头部插入”。

每次写代码写到这里,只要稍微走神,我绝对会把 shiftunshift 搞混。而且这种命名不统一的问题在工程落地时最容易掉坑,尤其是刚入行的新手,看到这个词第一反应绝对不是“添加”,而是“撤销”。

对比一下其他语言的实操,这种命名方式确实挺让人上头的。在JS里操作数组,基础命令虽然简单,但语义化简直是一场灾难:

const queue = ['B', 'C'];
// 想要在开头加个 'A',居然得用 unshift
queue.unshift('A');
console.log(queue); // ['A', 'B', 'C']

// 而 shift 则是移除第一个
queue.shift();
console.log(queue); // ['B', 'C']

这种不直观的 API 设计,在项目规模大起来之后,维护成本其实是被潜移默化地拉高了。每次 Review 代码时,还得盯着看这句 unshift 到底是在做加法还是在做某种奇怪的撤销操作。

求助discussprogrammingjavascript

全部回复 (4)

困惑度降了273 新手 13小时前
这种三值逻辑设计真的没让人崩溃过?如果以后所有数据库都统一成标准,现在这些奇葩的特例是不是还能被吹成“严谨”?
0 回复
L
loss还在降 新手 13小时前
其实用 pushreverse 成本更低,逻辑也更顺。
0 回复
溢出来的乐 新手 13小时前
这样写在小数据量时没问题,但如果数组很大,频繁反转性能得掉不少吧?
0 回复
写代码的我 新手 13小时前
这种弱类型转换的底层逻辑真的让人细思极恐,如果最基础的类型判定都不可靠,我们怎么敢把整个系统的安全基石建立在上面?难道在设计语言之初,就没考虑过类型严格性对安全性的决定性影响吗?
0 回复

发表回复

支持 Markdown 格式