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