gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:47:21 27 4
gpt4 key购买 nike

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

var counter = 1;
var myText = counter + " units".substr(0, 6-(counter===1));

很好 - 它可以满足我的要求。但是看着MDN docs for String.prototype.slice() ,我想我找到了一种方法,甚至更短,方法是使用传递负零作为函数的第二个参数。来自文档:

endSlice

Optional. The zero-based index at which to end extraction. If omitted, slice() extracts to the end of the string. If negative, it is treated as sourceLength + endSlice where sourceLength is the length of the string (for example, if endSlice is -3 it is treated as sourceLength - 3).

var myText = counter + " units".slice(0,-(counter===1));

counter 等于 1 时,它的计算结果为 .slice(0,-1),这会 chop 字符串中的最后一个字母,否则它会计算到 .slice(0,-0),根据文档,这意味着从正在操作的字符串的长度中减去 0 个字符。

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

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

tl;dr 我很生气,我不能开玩笑说通过切片赢得代码高尔夫。

最佳答案

从数学的 Angular 来看,没有负零。正数是任何大于零的数,负数是任何小于零的数。零不是那些。所以我猜你描述的行为是正确的。

A real number may be either rational or irrational; either algebraic or transcendental; and either positive, negative, or zero.

https://en.wikipedia.org/wiki/Real_number

不过,因为在编程中我们使用的是 float ,它是实数的近似值,所以有 -0 的概念,它可以表示太接近零而无法用其他方式表示的负数 - http://www.johndcook.com/blog/2010/06/15/why-computers-have-signed-zero/


关于你的javascript,你可以把它写成:

var counter = 1;
var myText = counter + " unit" + (counter > 1 ? "s" : "");

关于javascript - 在String.prototype.slice()中,.slice(0,-0)和.slice(0,+0)应该输出相同的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39460528/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com