Может кто-нибудь помочь понять, почему значение моей сессии изменилось для определенного значения, 03375?
Мой код контроллера MVC:
Session["something"] = "03375";
Мой код js:
$(function(){
alert(@Session["something"].ToString());
});
Результат: js alert 1789. Почему???
Он работает только для других значений. Вот скрипка https://dotnetfiddle.net/zLdyO8
Это не имеет никакого отношения к сеансу asp.net. Если вы сделаете это на своей странице
console.log(03375);
Вы получите 1789
Почему это происходит?
Потому что, когда время выполнения JavaScript 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));