2016-01-11 41 views
0

考慮下面的代碼:比較用戶輸入的號碼與領先的零

var a = 011; 

ans = prompt("enter password", ""); 

if (a == ans) { 
    alert("done"); 
} else { 
    alert("false"); 
} 

爲什麼console.log(a)輸出9?

我應該輸入什麼作爲密碼到提示中,以調用​​?

+3

甲的若干前導零意味着使用Javascript解釋爲八進制,即底座8 11八進制== 9(十進制)。 – James

+1

011是9的十進制表示 – fcalderan

+1

'a'由於'011'中的前導'0'而出現爲'9'。這是存儲在內存中作爲一個基地8號碼,在十進制是9。 – krillgar

回答

4

你會得到與parseInt("011", 8)相同的結果。這是一個以0開頭的整數字面量,被視爲octal(請參閱the MDN on integer literals)。

刪除0,你會沒事的。

如果你想要的是一個字符串,這裏是正確的文字:

var a = "011"; 
3

領先的0表示JavaScript中的八進制。

+0

和第二部分 – YAM

+1

@YAM javascript沒有強類型。 –

1

如果你不想八然後使它成爲一個字符串

var a = '011'; 

輸入,然後011會給你「完成'

1

0 =>這意味着八進制,所以這就是爲什麼你得到警報錯誤;

var a = 011; 

ans = prompt("enter password",""); 

if (a==ans){ 
    alert("done"); 
}else{ 
    alert("false") 
} 

var a = "011"將提醒了done;

從文檔:

  1. 如果輸入字符串以 「0x」 或 「0X」 開頭,基數是16 (十六進制)。
  2. 如果輸入字符串以「0」開頭,則基數爲八(八進制)。這個 功能是非標準的,有些實現故意做 不支持它(而不是使用基數10)。由於這個原因,當使用parseInt時,總是 指定一個基數。
  3. 如果輸入字符串以任何其他值開頭,則基數爲10(其中,十進制數爲)。
  4. 如果第一個字符無法轉換爲數字,parseInt 將返回NaN。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt