In String.prototype.slice () sollten .slice (0, -0) und .slice (0, + 0) dasselbe Ergebnis ausgeben?

9

Ich stieß auf diese Eigenart, als ich versuchte, die Streicherpluralisierung in einem Spiel mit Code-Golf zu optimieren. Ich hatte die Idee, Zeichenketten als Plural zu schreiben und dann mit substr das letzte Zeichen bedingt auszuschalten:

%Vor%

Es ist in Ordnung - es macht was ich wollte. Aber schauen Sie sich die MDN-Dokumentation für String.prototype.slice () dachte ich, ich hätte einen Weg gefunden, noch kürzer zu machen, indem ich die negative Null als zweites Argument für die Funktion übergebe. Aus der Dokumentation:

  

endSlice

     

Optional. Der nullbasierte Index, auf dem die Extraktion beendet werden soll. Wenn weggelassen, extrahiert slice () das Ende der Zeichenfolge. Wenn negativ, wird es als sourceLength + endSlice behandelt, wobei sourceLength die Länge der Zeichenfolge ist (wenn endSlice beispielsweise -3 ist, wird es als sourceLength - 3 behandelt).

%Vor%

Dies wird zu .slice(0,-1) ausgewertet, wenn counter gleich 1 ist, was den letzten Buchstaben der Zeichenkette zerschneiden würde, oder andernfalls zu .slice(0,-0) , was nach den Dokumenten bedeuten sollte, dass 0 Zeichen subtrahiert wurden die Länge der zu operierenden Saite.

Zufällig wird -0 genauso behandelt wie +0 by String.prototype.slice . Ich fragte mich, ob dies eine Konvention war, um -0 als das gleiche wie +0 zu behandeln (ich weiß, zum Beispiel, -0 === +0 ergibt true ). Ich dachte an String.prototype.substr , aber +0 und -0 sollen in dieser Funktion genauso behandelt werden.

Hat jemand einen größeren Einblick in das? Gibt es eine Grundkonvention im Sprachdesign, die besagt, dass, während signed zero ein Sprachfeature ist, es ignoriert werden sollte, außer in bestimmten Szenarien (wie 1/-0 )?

tl; dr Ich bin salzig, dass ich keine Witze darüber machen kann, Code-Golf durch slicing zu gewinnen.

    
jamesinc 13.09.2016, 00:23
quelle

1 Antwort

2

Aus mathematischer Sicht gibt es keine negative Null. Positiv ist eine Zahl größer als Null und negativ ist eine Zahl kleiner als Null. Null ist keiner von denen. Ich schätze, das von Ihnen beschriebene Verhalten ist korrekt.

  

Eine reelle Zahl kann entweder rational oder irrational sein; entweder algebraisch   oder transzendental; und entweder positiv, negativ oder Null.

Ссылка

Obwohl wir bei der Programmierung mit Gleitkommazahlen arbeiten, die eine Annäherung an reelle Zahlen darstellen, gibt es ein Konzept von -0, das eine negative Zahl darstellen könnte, die zu nahe an Null liegt, um anders dargestellt zu werden - < a href="http://www.johndcook.com/blog/2010/06/15/why-computer-have-signed-zero/"> Ссылка

In Bezug auf Ihr Javascript könnten Sie es wie folgt schreiben:

%Vor%     
Hugo Silva 13.09.2016, 01:54
quelle

Tags und Links