Почему 0.-5 оценивается как -5? - PullRequest
0 голосов
/ 25 февраля 2019

Предположим, я пишу 0.5 как 0.-5 неожиданным образом, но он все еще может работать.Что делает 0. в 0.-5, чтобы он все еще мог работать и оценивать -5?

Я также пробовал alert(0.-5+1), который печатает -4, игнорирует ли JavaScript 0. в 0.-5?

Ответы [ 5 ]

0 голосов
/ 26 февраля 2019

console.log(0. - 5)      // -5
console.log(0 - 5)       // -5
console.log('0.' - 5)    // -5
console.log('0' - 5)     // -5
console.log(0.-5 === -5) // true

'0.'или '0' то же самое в JavaScript, потому что тип уникален для чисел, называемых Number.Оператор минус находится между числами, старайтесь всегда преобразовывать то, что вы передаете в число.В Python отличается: первый - это Float, а второй - целое число, потому что он имеет несколько типов.

0 голосов
/ 26 февраля 2019

Я бы подумал, что реальный ответ не о десятичной точке, а о знаке минус: не будет ли это интерпретироваться как оператор, если ему предшествует что-либо, похожее на число?

0 голосов
/ 25 февраля 2019

В JS вы можете выразить число с дополнительным десятичным знаком.

x = 5.;    //5
x = 5. + 6.   //11

А что касается комментария Tvde1, то можно применять любой метод Number.

5..toString()

Этот синтаксис позволяет запускать функции Number без скобок.

5.toString() //error
(5).toString() //good
5..toString() //good
5 .toString() // awesome

См. этот вопрос, чтобы узнать, почему.

0 голосов
/ 25 февраля 2019

0.-5 может быть успешно проанализировано как 0. [1] , - и 5.Ниже приведено абстрактное синтаксическое дерево для выражения, сгенерированного проводником AST:

Parse tree generated by AST explorer

Это (неожиданным образом) допустимый JavaScript и значение -5.


[1] Согласно грамматика для числовых литералов необязательные десятичные цифры и части экспоненты:

NumericLiteral ::
DecimalLiteral
[...]

DecimalLiteral ::
DecimalIntegerLiteral.ДесятичныеЦифры opt ExponentPart opt

0 голосов
/ 25 февраля 2019

Конечные цифры после . являются необязательными:

console.log(0. === 0); // true

Итак

0.-5

преобразуется в

0 - 5

, что составляет всего -5.Аналогично,

0.-5+1

- это

0 - 5 + 1

, что составляет

-5 + 1

или -4.

...