Припустимо, я пишу 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.
є цілим числом.
float
s мають методи, і 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
.