java脚本和java动作文件中的字符串列表值不同

String List value is different in javascript and java action file

美好的一天,

在我的 java 动作文件中,我有一个列表:

 protected ArrayList< String > deletedCorpRegisteredAccountRefNo = new ArrayList< String >( );

然后我在这个 ArrayList 中放入一些数据,并打印出来:

   System.out.println( "deletedCorpRegisteredAccountRefNo : "+
                deletedCorpRegisteredAccountRefNo );

结果正确显示:

deletedCorpRegisteredAccountRefNo : [0000000000000234324, 0000000000015422629]

然后我转到我的 jsp 和我的 java 脚本函数,我试图将这个 ArrayList 值分配给一个 var 调用 refNoList,并打印出:

var refNoList = ${actionBean.deletedCorpRegisteredAccountRefNo};
console.log(refNoList);

我预计我会看到我的浏览器控制台打印出我在 Java System.out.println() 中看到的内容,但我得到另一个结果:

[80084, 15422629]

15422629 仍然可以接受,因为可能 JavaScript auto trim 0。但是不明白为什么0000000000000234324会变成80084,这是完全不同的。

我试图google找出根本原因,但没有找到,我想我在Google中问错了问题。

请指教。

如果 JavaScript 数字以零开头,它可以解释为 八进制值 。并且

var x = 0234324;
console.log(x);

这写出 80084,因为在十进制中,这是与八进制中的 234324 相同的值。

您需要 trim 字符串中的尾随零,它会按您希望的那样工作。


其他号码定义

在JavaScript中,数字可以解释为二进制、八进制、十进制或十六进制。这里有一些不同的文字:

123         - normal decimal
0123        - octal: decimal value is 83
0x123       - hexadecimal: decimal value is 291
0o123       - octal: decimal value is 123
0b101       - binary: decimal value is 5

第二个示例 (0123) 的问题在于它仅在可能时才被解释为八进制。例如。 09123081 将被解释为十进制。这个故事的寓意,你不应该依赖这种行为,如果你需要一个八进制,明确地使用 0o,如果你需要小数,trim 那些零。


解决问题

要将数字解析为小数,无论如何,您只需将 radix 值作为参数传递给 parseInt(number, radix):

var x = "000000123";
console.log(parseInt(x, 10)); // prints out 123