iOS Javascript Engine parseFloat (1) gibt eine negative Zahl zurück

8

Dieser Code wird den Fehler anzeigen:

%Vor%

Es ist in dieser Geige sichtbar: Ссылка (in Mobile Safari anzeigen, scrollen Sie nach unten und irgendwann sehen Sie parseFloat (1) & lt; 0). Das Negativ wurde irgendwo von der 73. Iteration bis über 1500 gefunden.

Beachten Sie, dass einige der scheinbar unnötigen Codes wie zum Beispiel der unbenutzte Parameter d und die nicht verwendete Variable var c = Math.abs(d); tatsächlich notwendig sind, damit der Fehler auftritt. Dies gilt auch für die Verwendung von n in der return-Anweisung und für den Aufruf von parseFloat (obwohl parseInt dies ebenfalls verursacht).

Fehler nur auf echten iPhone 4s (7.0.6) und zwei iPod Touch (7.1 beta) reproduziert. Nicht in iPads oder iOS Simulator oder einem Desktop-Browser. Der Fehler tritt nicht auf, wenn Remote Debugging aktiviert und eine Safari-Konsole auf Ihrem Computer geöffnet ist.

Ich bin ziemlich sicher, dass dies der genaue Grund für diese unbeantwortete Frage ist: Seltsames JavaScript Verhalten auf mobilen Safari iOS 6

Jeder Einblick in potenzielle Ursachen dieses Fehlers würde sehr geschätzt werden.

    
captainclam 03.03.2014, 06:04
quelle

2 Antworten

4

JIT Problem vielleicht? Ich habe die Implementierung von Math.abs in der JavascriptCore-Quelle gefunden, von der ich vermute, dass sie sich von Nitro (ios js engine) unterscheidet oder vielleicht als ausführbare JIT-Datei markiert ist.

%Vor%

Dies kann direkt in Javascript implementiert werden. So können Sie Ihre Math.abs-Aufrufe durch

ersetzen %Vor%

Dies wird das Problem lösen und Cross-Browser-kompatibel sein.

Submitted Apple Bug: 16209709

Weiß jemand, wie diese Art von Fehler auftritt oder einen besseren Weg, sie zu beschreiben?

Bitwechsel? Speicherkollision? Überlauf irgendeiner Art?

    
startswithaj 03.03.2014 23:17
quelle
-1

Ich schlage vor, dass Sie es im Standard verwenden sollten. Für parseInt ist es besser, den zweiten Parameter wie folgt zu übergeben: %Code%. Oder in einem IOS-System gibt es falsche Antworten.

Zum Beispiel wird parseInt(1, 10) in IOS als oktal gehandelt (es ist komisch ..).

    
Frankjs 08.04.2015 03:25
quelle

Tags und Links