为什么我的会话值针对特定值发生了变化?
Why my session value changed for a particular value?
有人可以帮助理解为什么我的会话值会针对特定值 03375 发生变化吗?
我的 MVC 控制器代码:
Session["something"] = "03375";
我的视图js代码:
$(function(){
alert(@Session["something"].ToString());
});
结果:js 提示 1789。为什么???
它适用于除此之外的其他值。这里有一个fiddlehttps://dotnetfiddle.net/zLdyO8
这与 asp.net 会话无关。如果您在您的页面中这样做
console.log(03375);
你会得到1789
为什么会这样?
因为当浏览器的 javascript 运行时看到一个以 0
前缀开头的数字时,它认为它是该数字的 octal 表示。 实际上 03375
是 1789
的八进制等效项。所以你的浏览器基本上是在转换八进制值
到它的十进制等价物并给你1789
(浏览器通常将数字解析为十进制表示法)
来自 mdn,
Note that decimal literals can start with a zero (0) followed by
another decimal digit, but if every digit after the leading 0 is
smaller than 8, the number gets parsed as an octal number.
这意味着,如果您正在尝试
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));
有人可以帮助理解为什么我的会话值会针对特定值 03375 发生变化吗?
我的 MVC 控制器代码:
Session["something"] = "03375";
我的视图js代码:
$(function(){
alert(@Session["something"].ToString());
});
结果:js 提示 1789。为什么???
它适用于除此之外的其他值。这里有一个fiddlehttps://dotnetfiddle.net/zLdyO8
这与 asp.net 会话无关。如果您在您的页面中这样做
console.log(03375);
你会得到1789
为什么会这样?
因为当浏览器的 javascript 运行时看到一个以 0
前缀开头的数字时,它认为它是该数字的 octal 表示。 实际上 03375
是 1789
的八进制等效项。所以你的浏览器基本上是在转换八进制值
到它的十进制等价物并给你1789
(浏览器通常将数字解析为十进制表示法)
来自 mdn,
Note that decimal literals can start with a zero (0) followed by another decimal digit, but if every digit after the leading 0 is smaller than 8, the number gets parsed as an octal number.
这意味着,如果您正在尝试
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));