诡异的0

PPMMOOT 2011-05-05 10:06:38
前几天在做一个简单功能的时候发现怎么也得不到预期效果,先描述一下我的功能:一个数据绑定控件,点击按钮以后就传一个参数给javascript函数来进行ajax处理;因此做了一个小测试如下:我传的参数是一个id,所以我就alert了一下那个id如070,但窗口显示却是56,(1)怀疑是参数传递的问题,所以直接alert(070),但还是56,(2)怀疑是vs的问题,所以就在记事本里面直接alert,但效果还是一样,(3)怀疑是电脑环境问题(w7),所以在xp测试了多次效果不变。
在深入测试后发现070~077,0700~0777,07000~07777。。。这些数有问题,去掉前面那个0就正常,问题分析:(1)javascript的类型属于弱类型,所以我传递的参数无论是什么类型只有参数是数字在javascript都会被转换成整形,因为开始时传的参数比较大(0700000000),所以怀疑是数据溢出,但经后来的测试可否认该观点;(2)有0与没0的区别,前面多一个0 javascript会在处理该数的时候做多额外的处理(例如把前面的0去掉),而这种处理会是做成这种结果的原因吗??(3)其他原因???
...全文
162 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
天下在我心 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 a550585206 的回复:]
引用 11 楼 shrinerain 的回复:
十进制没有070这种写法, 你要么是70, 要么是"070"字符串.

0代表8进制.

0x代表16进制.
我知道是没有这种写法,但我传递的是一个字符串型的参数,但到了javascript里面会自动地进行类型的判断,就会被整型
[/Quote]
你还可以这样
var para=para+"a";
这样就不会被认为是整形了,处理的时候去掉这个a就行。
孟子E章 2011-05-05
  • 打赏
  • 举报
回复
你数据库中的id就是字符类型的吗?为什么不采用数字类型的呢?或者前台也使用字符类型进行传递
PPMMOOT 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 shrinerain 的回复:]
十进制没有070这种写法, 你要么是70, 要么是"070"字符串.

0代表8进制.

0x代表16进制.
[/Quote]我知道是没有这种写法,但我传递的是一个字符串型的参数,但到了javascript里面会自动地进行类型的判断,就会被整型
子夜__ 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 a550585206 的回复:]

问题是找到了,解决方法有,就是在后台先将0去掉,然后在进行ajax处理之前在把0加上,但这样做有点麻烦有简便一点的方法吗???求赐教
[/Quote]
虽然是非主流的方法。。但是能有效的解决问题。有BUG么。
PPMMOOT 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 accomp 的回复:]
一个数据绑定控件,点击按钮以后就传一个参数给javascript函数来进行ajax处理

如果你不alert的话,那么,前头带不带0,对你结果应该没影响呀。
[/Quote]有啊,我传递的是数据库里面的id
accomp 2011-05-05
  • 打赏
  • 举报
回复
一个数据绑定控件,点击按钮以后就传一个参数给javascript函数来进行ajax处理

如果你不alert的话,那么,前头带不带0,对你结果应该没影响呀。
accomp 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 laowang134 的回复:]
整型值可以是正整数,负整数和 0。可以用 10 进制,8 进制和 16 进制来表示。在 Jscript 中大多数字是用十进制表示的。加前缀“0”表示 8 进制的整型值,只能包含 0 到 7 的数字。前缀为“0”同时包含数字“8”或“9”的数被解释为十进制数。

加前缀“0x”(零和x|X)表示 16 进制整型值。可以包含数字 0 到 9,以及字母 A 到 F(大写或小写)。使用字母 A 到 ……
[/Quote]
+1

以前我也遇到过这问题,后来直接把开头的0给trim掉了。
PPMMOOT 2011-05-05
  • 打赏
  • 举报
回复
问题是找到了,解决方法有,就是在后台先将0去掉,然后在进行ajax处理之前在把0加上,但这样做有点麻烦有简便一点的方法吗???求赐教
孟子E章 2011-05-05
  • 打赏
  • 举报
回复
你要传递过去,你就把前面的0先去掉啊

道理前面都清楚了,要解决问题,就就要去变通了啊
孟子E章 2011-05-05
  • 打赏
  • 举报
回复
你怎么传的?
shrinerain 2011-05-05
  • 打赏
  • 举报
回复
十进制没有070这种写法, 你要么是70, 要么是"070"字符串.

0代表8进制.

0x代表16进制.
PPMMOOT 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 laowang134 的回复:]
整型值可以是正整数,负整数和 0。可以用 10 进制,8 进制和 16 进制来表示。在 Jscript 中大多数字是用十进制表示的。加前缀“0”表示 8 进制的整型值,只能包含 0 到 7 的数字。前缀为“0”同时包含数字“8”或“9”的数被解释为十进制数。

加前缀“0x”(零和x|X)表示 16 进制整型值。可以包含数字 0 到 9,以及字母 A 到 F(大写或小写)。使用字母 A 到 ……
[/Quote]原来是这个问题,在测试070~077的时候发现有递增的规律,就觉得有疑问了
PPMMOOT 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 net_lover 的回复:]
你的parseInt有问题
正确的
parseInt("070",10)

错误的写法是

parseInt("070")
[/Quote]这样是没问题,但传递的参数在进来的时候就会被转换
laowang134 2011-05-05
  • 打赏
  • 举报
回复
整型值可以是正整数,负整数和 0。可以用 10 进制,8 进制和 16 进制来表示。在 Jscript 中大多数字是用十进制表示的。加前缀“0”表示 8 进制的整型值,只能包含 0 到 7 的数字。前缀为“0”同时包含数字“8”或“9”的数被解释为十进制数。

加前缀“0x”(零和x|X)表示 16 进制整型值。可以包含数字 0 到 9,以及字母 A 到 F(大写或小写)。使用字母 A 到 F 表示十进制 10 到 15 的单个数字。就是说 0xF 与 15 相等,同时 0x10 等于 16。

八进制和十六进制数可以为负,但不能有小数位,同时不能以科学计数法(指数)表示。

laowang134 2011-05-05
  • 打赏
  • 举报
回复
2楼被删除了!~
孟子E章 2011-05-05
  • 打赏
  • 举报
回复
你要传递070为参数,就采用字符串格式,alert("070")
laowang134 2011-05-05
  • 打赏
  • 举报
回复
以0开头好像是8进制的数!~。。
孟子E章 2011-05-05
  • 打赏
  • 举报
回复
0开头代表8进制
孟子E章 2011-05-05
  • 打赏
  • 举报
回复
你的parseInt有问题
正确的
parseInt("070",10)

错误的写法是

parseInt("070")
Top_小鑫 2011-05-05
  • 打赏
  • 举报
回复
2500的杯具路过.........
加载更多回复(2)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧