在javascript中输出Console.log

时间:2017-03-03 06:04:24

标签: javascript

为什么$result = DB::table(tablename) ->selectRaw('sum(column)') ->get(); console.log(00);打印0& 1在浏览器控制台而不是00& 01?

console.log(01);

6 个答案:

答案 0 :(得分:23)

  

永远不要写一个前导零的数字(如07)。   一些JavaScript版本将数字解释为八进制,如果它们用前导零写入。

这是因为JavaScript将前导0视为八进制数,这就是你得到八进制数(基数为8)的原因。

您可以使用parseInt和基数来消除这些问题。

并且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

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

编号系统表

Number System

答案 1 :(得分:12)

<强>评估

执行console.log(stuff)时,在打印之前,会评估stuff以查看要打印的内容。这就是console.log(3+2)打印5而非3+2的原因。这与console.log无关,评估是在执行console.log之前完成的。任何函数的行为方式都相同,它将作为参数传递评估的5而不是初始的3+2

<强>解析

即使在评估之前,还有另一个因素在起作用:解析。解析是解释源代码的第一步,它指的是分析源代码中的字符以确定它们引用的逻辑结构(标记)。

这里棘手的一点是,数字可以写成few ways

  • 115 - 用十进制数写的数字(基数为10)
  • 01017 - 以八进制编写的数字(基数为8)
  • 0b10b1111 - 以二进制(基础2)
  • 编写的数字
  • 0x10xE - 以十六进制(16位)编写的数字

所有这些都引用相同的2个数字 - 1和15,但它们是不同的图形表示方式,与您考虑60000006相同的数字相同。

解析源代码后,源代码中写入的字符被替换为&#34;按他们所代表的实际数字。这意味着即使在Javascript引擎知道它必须进行一些打印之前,你所写的字符就会消失,剩下的就是你引用的实际数字。

附件B

虽然主Javascript规范仅考虑以0o开头的八进制数,但legacy syntax会考虑以0开头的八进制数。

答案 2 :(得分: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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

原因console.log始终以DEC格式显示。例如:在OCT中011为11,在DEC中为9。enter image description here

答案 5 :(得分:0)

我做了一些研究并找到了解决方案。

第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