数字の先頭に0が付いたjsロジックを理解したいだけです。例えば
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
誰かが、それがどのように機能するのか、なぜ最初の例では機能し、先行ゼロを無視するのかを説明できますか?
ありがとうございました
数値リテラルの先頭の0
は、8進整数が意図であることを示します。ただしsecond桁は8
または9
です。その場合、先頭の0
は無視されます。
8進数のリテラルは整数でなければならないため、02.5
は誤りです。
この動作は2014年にFirefoxのバグとして記録されましたが、世界中に非常に多くのJavaScriptコードがあり、その多くが(おそらく不注意で)構文エラーではない09.3
に依存しているため、バグは「WONTFIX」とマークされました。 "。
以下のコメントで指摘されているように、「厳密な」モードでは、8進定数は完全に許可されていません。
先頭のゼロは、8進数(基数8)の数値を示します(10進数の基数10の数値ではありません)。
先頭の0xは16進数を示し、先頭の0bは2進数を示します。
したがって、数字「9」は8進表記で存在しないため、09.3はデフォルトで10進数になります。
編集(クレジットEvan Trimboli、以下):8進リテラルは整数でなければならないため、02.5は例外をスローします。
この答えには遅れていますが、それでも私の側からの更新です。厳密モードでPointyが言ったように、8進定数は許可されていません。
'use strict'
if(022 == 22){
console.log("True");
}
console.log("Failed")
例外をスローします
{
"message": "Uncaught SyntaxError: Octal literals are not allowed in strict mode.",
"filename": "https://stacksnippets.net/js",
"lineno": 14,
"colno": 4
}
2桁目を8
または9
として追加しても、先頭の0
はstrict mode
では許可されません。
'use strict'
if(029 == 29){
console.log("True");
}
console.log("Failed")
また、例外をスローします
{
"message": "Uncaught SyntaxError: Decimals with leading zeros are not allowed in strict mode.",
"filename": "https://stacksnippets.net/js",
"lineno": 14,
"colno": 4
}
また、先行ゼロは先行ゼロなしで同じ値であるため、意味がありませんでした。ただし、反対側から値を受け取る場合は注意が必要です。