小编jam*_*inc的帖子

在String.prototype.slice()中,应该.slice(0,-0)和.slice(0,+ 0)输出相同的结果吗?

我在尝试在代码高尔夫游戏中优化弦乐复数时遇到了这个怪癖.我有想法将字符串写成复数,然后用来substr有条件地删除最后一个字符:

var counter = 1;
var myText = counter + " units".substr(0, 6-(counter===1));
Run Code Online (Sandbox Code Playgroud)

这很好 - 它做了我想要的.但是看看String.prototype.slice()MDN文档,我认为通过使用负零作为函数的第二个参数,我找到了一种使其更短的方法.来自文档:

endSlice

可选的.从零开始的索引,用于结束提取.如果省略,slice()将提取到字符串的末尾.如果为负数,则将其视为sourceLength + endSlice,其中sourceLength是字符串的长度(例如,如果endSlice为-3,则将其视为sourceLength - 3).

var myText = counter + " units".slice(0,-(counter===1));
Run Code Online (Sandbox Code Playgroud)

这将评估为何.slice(0,-1)counter等于1,这将切断字符串中的最后一个字母,否则它将评估为.slice(0,-0),根据文档应该意味着从正在操作的字符串的长度中减去0个字符.

碰巧,-0被视为与+ 0相同String.prototype.slice.我想知道这是否是一个惯例,将-0视为与+0相同(例如,我知道,-0 === +0评估为true).我想看看String.prototype.substr,但+0和-0应该在该函数中以相同的方式处理.

有没有人对此更深入了解?语言设计中是否有一些基本惯例表明,虽然有符号零是语言特征,但应该忽略它,除非在某些情况下(如1/-0)?

TL;博士,我咸,我不能对赢得代码高尔夫笑话切片.

javascript negative-zero

10
推荐指数
1
解决办法
244
查看次数

标签 统计

javascript ×1

negative-zero ×1