簡體   English   中英

在javascript中輸出Console.log

[英]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

解析

甚至在評估之前,還有另一個因素在起作用:解析。 解析是解釋源代碼的第一步,它指的是分析源代碼中的字符以確定它們引用的邏輯結構(標記)。

這里的棘手問題是數字可以用幾種方式編寫:

  • 115 -寫在十進制數(底為10)
  • 01017 -寫在八進制數(基數為8)
  • 0b10b1111 -寫在二進制數(基數為2)
  • 0x10xE -寫入十六進制數(基數為16)

所有這些都指的是相同的2個數字 - 1和15,但它們是不同的圖形表示,與您認為60000006相同的數字相同。

解析源代碼后,源代碼中寫入的字符將被它們所代表的實際數字“替換”。 這意味着即使在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。

原因console.log始終以DEC格式顯示。 例如:OCT中的011為11,DEC為9。 在此輸入圖像描述

我做了一些研究,發現了這個解決方案。

第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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM