Neden 019 JavaScript sözdizimi bir hata değil mi? Ya da neden 019 > 020.
Ben JavaScript konsolunda 4 ** (Chrome ve Firefox test) yazarsanız, cevap true
olsun.
Bu 020
019
anlaşılan DecimalLiteral
olarak algılanıyor oysa OctalIntegerLiteral
eşit 16
() yorumlanan (19
eşittir) kaynaklanmaktadır. 19
16
, 019 > 020
daha büyük true
.
019
neden bana ne olduğunu ilk etapta DecimalLiteral
olarak yorumlanır. Hangi üretim? DecimalIntegerLiteral
019
izin vermiyor:
DecimalIntegerLiteral ::
0
NonZeroDigit DecimalDigits_opt
OctalIntegerLiteral
019
9
sekizlik bir rakam değil gibi) izin vermiyor:
OctalIntegerLiteral ::
0 OctalDigit
OctalIntegerLiteral OctalDigit
OctalDigit :: one of
0 1 2 3 4 5 6 7
, 019
şartnamede aslında reddedilmelidir gördüğüm kadarıyla, bir ondalık tamsayı olarak yorumlanır anlamıyorum.
Yerde uyumluluk kuralı diye bir şey var sanırım ama resmi bir tanım bulmak için başarısız oldum. Lütfen herkes bu konuda bana yardımcı olabilir mi?
(Neden bu gerekir: JavaScript/ECMAScript parser for Java with JavaCC geliştiriyorum ve şartname ve sapmalar bunların.) için özel bir dikkat etmeniz gerekiyor
CEVAP
Bulabildiğim kadarıyla, JavaScript bazı uygulamaları sadece bu konuda spec izleyin yok gibi görünüyor.
Ondalık rakamları sıfır (0) ile başlar unutmayın ardından Eğer baştaki 0 sonraki basamak İse başka bir ondalık basamak, ama 8, Bir sayıyı sekizli olarak ayrıştırılmış olur sayısından küçük. Bu olmaz JavaScript, bug 957513 bakın at. Ayrıca bkz: sayfa hakkında () parseınt.
Bu hala 019 == 19
, baştaki 0 sonra bir sonraki basamak verilen 1 ve bütün numarası bu nedenle sekizli olarak ayrıştırılması gerektiğini açıklamıyor. Ama başvurulan böcek davasıyla ilgili görünüyor. Onun hakkında diyor ki:
Aşağıdaki JavaScript program bir hata atmak gerekir:
08
,
DecimalIntegerLiteral
spec başına asla0
doğrudan olabilir gibi başka bir ondalık basamak ile izlenen, ancak Chrome/Opera, PrestOpera, ve Firefox desteği.
Hata WONTFIX olarak kapatıldı
Ancak 019
geçerli bir ondalık edebi değeri ile bir sonraki sürümün taslağa göre 19, eşit olacaktır:
https://people.mozilla.org/~jorendorff/es6-draft.html#sec-additional-syntax-numeric-literals
(İlgili kuralları işaretledim)
The syntax and semantics of 11.8.3 is extended as follows except that
this extension is not allowed for strict mode code:
[...]
DecimalIntegerLiteral ::
0
NonZeroDigit DecimalDigits_opt
NonOctalDecimalIntegerLiteral // (1)
NonOctalDecimalIntegerLiteral ::
0 NonOctalDigit
LegacyOctalLikeDecimalIntegerLiteral NonOctalDigit // (2)
NonOctalDecimalIntegerLiteral DecimalDigit
LegacyOctalLikeDecimalIntegerLiteral ::
0 OctalDigit // (3)
LegacyOctalLikeDecimalIntegerLiteral OctalDigit
Yani 01
LegacyOctalLikeDecimalIntegerLiteral
(3) . Sonra 019
sıraylaDecimalIntegerLiteral
(1)Bir olan NonOctalDecimalIntegerLiteral
(2) .
Neden' ◎ܫ◎ ve fonksiyonu t JavaSc...
Neden yok C# statik bir yöntem bir örn...
Neden't tarayıcıları başka bir ke...
Javascript konsolu.günlük neden hata: ...
neden javascript node.js google app en...