为什么$result = DB::table(tablename)
->selectRaw('sum(column)')
->get();
和console.log(00);
打印0& 1在浏览器控制台而不是00& 01?
console.log(01);
答案 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
为了您的参考,我已经添加了数字系统表
答案 1 :(得分:12)
<强>评估强>
执行console.log(stuff)
时,在打印之前,会评估stuff
以查看要打印的内容。这就是console.log(3+2)
打印5
而非3+2
的原因。这与console.log
无关,评估是在执行console.log
之前完成的。任何函数的行为方式都相同,它将作为参数传递评估的5
而不是初始的3+2
<强>解析强>
即使在评估之前,还有另一个因素在起作用:解析。解析是解释源代码的第一步,它指的是分析源代码中的字符以确定它们引用的逻辑结构(标记)。
这里棘手的一点是,数字可以写成few ways:
1
,15
- 用十进制数写的数字(基数为10)01
,017
- 以八进制编写的数字(基数为8)0b1
,0b1111
- 以二进制(基础2)0x1
,0xE
- 以十六进制(16位)编写的数字所有这些都引用相同的2个数字 - 1和15,但它们是不同的图形表示方式,与您考虑6
和0000006
相同的数字相同。
解析源代码后,源代码中写入的字符被替换为&#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)
答案 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