2016-01-27 4 views
7

Я просто хочу понять логику js с 0-s в начале числа. НапримерJavascript 0 в начале номера

var x = 09.3 
// here x == 9.3 
// other example 
09.3 == 9.3 
// returns true 

// but check this one 
var x = 02.5 
// Uncaught SyntaxError: Unexpected number 
// or this one 
02.5 == 2.5 
// same error here 

Может кто-нибудь объяснить, как это работает, почему в первом примере это работает, и игнорирует ведущие нули, а во втором примере это дает мне SyntaxError

Спасибо

+6

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Integers – hindmost

+2

В моем браузере '09.3' определенно не равен' 0,3'. Какой браузер (или среда) вы используете? – Pointy

+0

Pointy, извините за ошибку, я имею в виду 9.3 – Gor

ответ

15

Ведущий 0 на числовой литерала означает, что восьмеричное целое намерение, есливторой цифра не является 8 или 9. В этом случае ведущий 0 игнорируется.

Поскольку восьмеричные числовые литералы должны быть целыми числами, 02.5 является ошибочным.

Это поведение было зарегистрировано как ошибка в Firefox в 2014 году, но из-за того, что в мире так много JavaScript-кода, и большая часть его (вероятно, непреднамеренно) полагается на 09.3, не являясь синтаксической ошибкой, ошибка была отмечена как «WONTFIX ».

Как указано в комментарии ниже, в «строгом» режиме восьмеричные константы полностью исключены.

+2

Не только вторая цифра - если какая-либо цифра равна 8 или 9, то ведущее 0 игнорируется. – Barmar

+0

Также может быть информативным упомянуть, что синтаксис был устаревшим в ES5, поэтому недействителен в течение многих лет на данный момент. – zerkms

+0

@Barmar hmm MDN подразумевает, что вторая цифра важна; Я снова проверю спецификацию. * edit * похоже, что MDN ошибочен (или плохо сформулирован). – Pointy

5

A ведущий ноль указывает восьмеричное (базовое 8) число (в отличие от десятичного - базового 10 - номера).

Ведущее 0x указывает шестнадцатеричное число, а ведущее 0b - двоичное число.

Поэтому значение 09.3 по умолчанию равно десятичному, поскольку цифра «9» не существует в восьмеричной нотации.

Редактировать (кредит Эван Trimboli, ниже): 02.5 выбрасывает исключение, потому что восьмеричные литералы должны быть целыми числами.

+1

Это все еще не объясняет, почему он выдает исключение, потому что восьмеричные литералы должны быть целыми числами. –

+0

'09.3' по умолчанию' 9.3', а не '0,3'. Это была опечатка в вопросе, который был отредактирован. – Barmar