如何处理数组元素[-0]转字符串?为何取首字符得到"0"而非"-"?
问题分析:为什么-0转字符串后首字符不是"-"?
核心原因很直接:JavaScript 里-0和0在底层数值判定上是同一个值,调用toString()方法时,语言规范会直接把-0转换成字符串"0",不会保留负号。你可以直接在控制台验证:
console.log((-0).toString()); // 输出 "0"
这就是你的代码处理-0时取不到负号的原因——i.toString()已经把-0变成"0"了,自然拿不到首字符"-"。
如果需要区分-0和常规的0,你可以用Object.is()做精确判断,修改代码如下:
function invert(array) { return array.map(i => { if (Object.is(i, -0)) { return "-"; } return i.toString()[0]; }); }
测试这个版本的函数,传入[-10,8,-2,-0]就能得到你预期的["-", "8", "-", "-"]。
补充说明:-0一般在特定运算场景下产生(比如-1 * 0、Math.sqrt(-0)),但JS在常规类型转换时会默认抹平它和0的差异,所以有区分需求时必须手动判断。
内容的提问来源于stack exchange,提问作者Ivan M
相关产品推荐
相关产品推荐

