有人可以帮助理解为什么我的会话值因特定值而改变了吗?03375?
我的MVC控制器代码:
Session["something"] = "03375";
我的观点是js代码:
$(function(){
alert(@Session["something"].ToString());
});
结果:js提醒1789.为什么???
它适用于其他值,除了。这是一个小提琴https://dotnetfiddle.net/zLdyO8
答案 0 :(得分:2)
这与asp.net会话无关。如果您在页面中执行此操作
console.log(03375);
您将获得1789
为什么会这样?
因为当浏览器的javascript运行时看到以0
前缀开头的数字时,它认为它是八进制表示的数字。 实际上03375
是1789
的八进制等效值。所以你的浏览器基本上是转换八进制值
到它的十进制等值并给你1789
(浏览器通常将数字解析为十进制表示)
来自mdn,
请注意,十进制文字可以以零(0)开头,后跟 另一个十进制数字,但如果前导0之后的每个数字都是 小于8时,该数字将被解析为八进制数。
这意味着,如果您正在尝试
console.log(09375);
它会打印,9375
!!!
要处理您的情况,理想的解决方案是设置正确的类型值。例如,如果要传递数值,只需设置数值而不是前导零的字符串版本。
Session["something"] = "3375";
甚至更好
Session["something"] = 3375;
然后在客户端,
alert(@Session["something"]);
如果您绝对想要保留0
前缀,同时设置会话值,但是您希望将值作为客户端的数字,则可以在字符串中读取它,然后使用parseInt
来将其转换为数字类型
var r = '@Session["something"].ToString()';
alert(r); // the string with leading 0
var n = parseInt(r);
alert(n); // the number
alert(typeof(n));