首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在String.prototype.slice()中,.slice(0,-0)和.slice(0,+0)应该输出相同的结果吗?

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

Stack Overflow用户
提问于 2016-09-13 00:23:00
回答 1查看 692关注 0票数 11

我在尝试优化代码高尔夫游戏中的字符串多元化时遇到了这种怪癖。我的想法是将字符串写成复数,然后使用substr有条件地剪掉最后一个字符:

代码语言:javascript
复制
var counter = 1;
var myText = counter + " units".substr(0, 6-(counter===1));

没事-它能做我想做的事。但是看看用于String.prototype.slice()的MDN文档,我想我找到了一种方法来使它更短,使用负零作为函数的第二个参数。从医生那里:

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

代码语言:javascript
复制
var myText = counter + " units".slice(0,-(counter===1));

.slice(0,-1) =1时,这将计算为counter,这将从字符串中分割出最后一个字母,或者它将计算为.slice(0,-0),根据文档,.slice(0,-0)应该意味着从所操作的字符串的长度中减去0个字符。

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

有没有人对此有更深的洞察力?在语言设计中是否有一些基本的约定:虽然签名为零是一种语言特性,但除了某些场景(比如1/-0)之外,它应该被忽略吗?

tl;博士,我太咸了,我不能用切片来开玩笑打赢代码高尔夫。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-13 01:54:43

从数学的角度看,没有负零。正数大于零,负数小于零。零不是这两样。所以我想你描述的行为是正确的。

一个实数既可以是有理的,也可以是非理性的;可以是代数的,也可以是超越的;或者是正数,也可以是负数,也可以是零。

虽然,因为在编程中我们使用浮点数(这是实数的近似),但是有一个概念-0,它可以表示一个负数太接近于零而不能用- http://www.johndcook.com/blog/2010/06/15/why-computers-have-signed-zero/表示。

关于您的javascript,您可以将其写为:

代码语言:javascript
复制
var counter = 1;
var myText = counter + " unit" + (counter > 1 ? "s" : "");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39460528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档