繁体   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