评估数学表达式时的Javascript eval如果使用的数字以0开头,则输出错误

Mar*_*rko 2 javascript eval

所以当我使用时:

eval('03*3');
Run Code Online (Sandbox Code Playgroud)

我应该得到9分.但是当我使用时:

eval('033*3');
Run Code Online (Sandbox Code Playgroud)

我得到81而不是99.我确信这个结果有一个很好的解释,但我找不到答案.有人可以解释一下吗?

Poi*_*nty 9

在JavaScript中,与C和C++一样,以零开头的数字常量被解释为base-8(八进制)值.因此033是十进制27(3*8 + 3).您的第一个示例有效,因为03(八进制3)与十进制3相同,因为3是3.多位数值将关闭.

  • @Kolink:这里有解释:http://es5.github.io/#B.1.1(``OctalIntegerLiteral`以`0`开头,然后是'OctalDigit`(`0`-`7`)) . (3认同)
  • 也就是说,这种行为没有在任何标准中定义.只是浏览器出于某种原因支持它.这就是你应该总是将`10`参数传递给`parseInt`的原因. (2认同)