为什么我的会话值针对特定值发生了变化?

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 表示。 实际上 033751789 的八进制等效项。所以你的浏览器基本上是在转换八进制值 到它的十进制等价物并给你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));