在javascript中输出Console.log

God*_*des 6 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;
Run Code Online (Sandbox Code Playgroud)

Gan*_*nnu 23

永远不要写一个前导零的数字(如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
Run Code Online (Sandbox Code Playgroud)

参考: - http://javascript.info/tutorial/object-conversion

为了您的参考,我添加了数字系统表

数字系统表

数字系统

  • 好的,但这并没有真正解释输出没有前导零. (3认同)

Tib*_*bos 12

评估

在执行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,但它们是不同的图形表示,与您考虑的方式60000006数字相同.

解析源代码后,源代码中写入的字符将被它们所代表的实际数字"替换".这意味着即使在Javascript引擎知道它必须进行一些打印之前,您编写的字符也会消失,剩下的是您引用的实际数字.

附件B.

虽然主要的Javascript规范只考虑那些以八进制数开头的数字0o,但遗留语法会考虑那些以八进制数开头的数字0.


小智 6

在控制台中领先零,使其达到8.

console.log(00)=0
console.log(01)=1
console.log(011)=9 //0+8+1
console.log(0111)=73 //0+64+8+1
Run Code Online (Sandbox Code Playgroud)


小智 1

当您编写 console.log(00) 时,参数 00 被解释为数字,因此打印 0。另一方面,如果您编写 console.log("00") 00 将被解释为字符串并打印 00。

  • 当您查看问题中的最后两个示例时,问题会变得更有趣,不是吗? (6认同)