Припустимо, я пишу 0.5як 0.-5несподівано, але він все одно може працювати. Що робить 0.in 0.-5, щоб він все ще міг працювати і оцінюється до -5?
Я також спробував , alert(0.-5+1)який друкує -4, робить JavaScript ігнорувати 0.в 0.-5?
Припустимо, я пишу 0.5як 0.-5несподівано, але він все одно може працювати. Що робить 0.in 0.-5, щоб він все ще міг працювати і оцінюється до -5?
Я також спробував , alert(0.-5+1)який друкує -4, робить JavaScript ігнорувати 0.в 0.-5?
0.-5це "несподіваний шлях"?
0.-5мати синтаксичну помилку і не дозволяти плаваючі літерали з кінцевим періодом, але змусити людей писати .0в кінці.
.заважає писати щось на кшталт 123.toString(16)(Загальна хитрість полягає у використанні 123..toString(16), що є насправді (123.).toString(16))
Відповіді:
Кінцеві цифри після a .необов’язкові:
console.log(0. === 0); // true
Тому
0.-5
оцінює до
0 - 5
що справедливо -5. Так само,
0.-5+1
є
0 - 5 + 1
який є
-5 + 1
або -4.
0.-5може бути успішно проаналізований як 0.[1] , -і 5. Нижче наведено дерево абстрактного синтаксису для виразу, згенерованого провідником AST:

Це (несподіваним чином) є дійсним JavaScript і обчислюється на -5.
[1] Відповідно до граматики для числових літералів десяткові цифри та експоненти не є обов’язковими:
NumericLiteral ::
DecimalLiteral
[...]DecimalLiteral ::
ДесятичнийцілийЛітерал. DecimalDigits opt ExponentPart opt
У 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
Перегляньте це запитання, щоб з’ясувати, чому.
5..toString().
1.0це плаваюча точка, але 1.є цілим числом.
floats мають методи, і 5.є a float.
(1).toMethod()є законною, забороняє (1.)правильно аналізувати. Найбільш традиційний підхід до синтаксичного аналізу (жадібна лексика лексем, включаючи літерали, а потім синтаксичний аналіз) створює поведінку Javascript.
Я б подумав, що справжня відповідь полягає не в десятковій крапці, а в знаку мінус: хіба це не буде інтерпретовано як оператор, якщо перед ним стоїть щось, схоже на число?
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, а другий - Integer, оскільки він має кілька типів.
0.це як0.0. Або просто0.