[英]Console.log output in javascript
為什么要console.log(00);
和console.log(01);
在瀏覽器控制台中打印0和1而不是00&01?
console.log(00); // prints 0;
console.log(01); // prints 1;
console.log(011); // prints 9;
console.log(0111); // prints 73;
永遠不要寫一個前導零的數字(如07)。 一些JavaScript版本將數字解釋為八進制,如果它們使用前導零寫入。
這是因為JavaScript將前導0視為八進制數,這就是為什么要獲得八進制數(基數為8)。
你可以使用parseInt和radix來消除這些問題。
並且console.log將輸入視為八進制的原因是,默認情況下console.log調用valueOf
輸入方法。 如果它沒有返回任何內容,它將調用toString
方法。
valueOf
方法返回如下值:
00.valueOf() // 0
01.valueOf() // 1
011.valueOf() // 9
0111.valueOf() // 73
參考: - http://javascript.info/tutorial/object-conversion
為了您的參考,我添加了數字系統表
評估
在執行console.log(stuff)
,在打印之前,會評估stuff
以查看要打印的內容。 這就是為什么console.log(3+2)
打印5
而不是3+2
。 這與console.log
無關,特別是評估是在執行console.log
之前完成的。 任何函數都會以相同的方式運行,它會將已評估的5
作為參數傳遞,而不是初始的3+2
解析
甚至在評估之前,還有另一個因素在起作用:解析。 解析是解釋源代碼的第一步,它指的是分析源代碼中的字符以確定它們引用的邏輯結構(標記)。
這里的棘手問題是數字可以用幾種方式編寫:
1
, 15
-寫在十進制數(底為10) 01
, 017
-寫在八進制數(基數為8) 0b1
, 0b1111
-寫在二進制數(基數為2) 0x1
, 0xE
-寫入十六進制數(基數為16) 所有這些都指的是相同的2個數字 - 1和15,但它們是不同的圖形表示,與您認為6
和0000006
相同的數字相同。
解析源代碼后,源代碼中寫入的字符將被它們所代表的實際數字“替換”。 這意味着即使在Javascript引擎知道它必須進行一些打印之前,你所寫的字符就會消失,剩下的就是你引用的實際數字。
附件B.
雖然主Javascript規范只考慮以0o
開頭的八進制數,但遺留語法會考慮以0
開頭的八進制數。
在控制台中領先零,使其達到8。
console.log(00)=0
console.log(01)=1
console.log(011)=9 //0+8+1
console.log(0111)=73 //0+64+8+1
當您編寫console.log(00)時,參數00被解釋為數字,因此打印0。 另一方面,如果您編寫console.log(“00”),00將被解釋為字符串並打印00。
我做了一些研究,發現了這個解決方案。
第1點 - 如果任何以零為前導的數字並不總是被視為小數。
第2點 - 以零為前導且不包含8或9的剩余數字的數字將被視為八進制並在打印其值時轉換為十進制。
第3點 - 一個以零為前導並且剩余數字包含8或9的數字將被視為十進制值。
點4 - 00到07將不會轉換為十進制,因為它們已經是十進制的。
var a = 07
console.log(a) //// 7
var a = 08
console.log(a) //// 8
var a = 016
console.log(a) //////14
var a = 018
console.log(a) //////18
var a = 078
console.log(a) //////78
var a = 077
console.log(a) ////////63
var a = 096
console.log(a) /////96
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.