2016-11-17 5 views
0

Я играл с кукисами в первый раз, и у меня сохранилась часть его. Данные, которые я сохраняю, - это числа, и самая важная часть этих nubers - это то, что я могу добавить, вычесть и так далее. Однако, когда я пытаюсь добавить число в один из моих сохраненных параметров, он добавляет их, как если бы они были текстом.Javascript добавляет номера, как если бы они были строкой

Пример: У меня есть печенье под названием value, и когда я хочу это значение я использую сценарий, который я нашел на Jeffery To который выглядит следующим образом:

function readCookie(name) { 
    return (name = new RegExp('(?:^|;\\s*)' + ('' + name).replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') + '=([^;]*)').exec(document.cookie)) && name[1]; 
} 

После того как я собрал это печенье я хочу чтобы добавить один к нему. Допустим, что значение равно девяти, когда оно должно выглядеть так: value + 1 = 10. Простая математика. Однако это дает мне это 91. Почему он это делает? Я знаю, что это потому, что он считает, что цифры представляют собой строку текста, но как я могу заставить это вести себя как числа?

Решение После прочтения комментариев я узнал, что мне нужно, чтобы положить мой value Внутри parseInt(). Таким образом, я просто изменил Funtion сказать:

function readCookie(name) { 
     return parseInt((name = new RegExp('(?:^|;\\s*)' + ('' + name).replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') + '=([^;]*)').exec(document.cookie)) && name[1]); 
    } 
+0

Попробуйте '+ value' или' ParseInt (значение) ' –

+0

Вы думали об использовании [ParseInt] (https://developer.mozilla.org/EN-US/Docs/Web/JavaScript/Справка/Global_Objects/ParseInt)? – larz

+0

Опубликуйте часть кода, в которой вы действительно что-то добавляете. –

ответ

1

+ оператор в JavaScript может означать математическое сложение или объединение строк. Тот, который вы получаете, основан на неявном типе операндов. Если один из операндов является строкой, другой будет преобразован в строку, и вы получите конкатенацию.

Хитрость состоит в том, чтобы сначала выполнить математику по номерам (вы можете окружать математическую часть скобкой или выполнять математику в отдельном заявлении), а затем вводить результат в свою строку.

Чтобы заставить строку, содержащую номер символа в ряд, вы можете использовать parseInt() и parseFloat():

var result = parseInt(value, 10) + 1; 

Обратите внимание, что с parseInt(), вы должны поставить необязательный второй аргумент, который определяет десятичную для операции , Если первый аргумент ссылается на строку, содержащую шестнадцатеричное значение, результат будет основан на шестнадцатеричном, а не на базовом 10. Вот почему 10 используется в моем примере.

Также обратите внимание, что оба parseInt() и parseFloat() останавливаются после нахождения первых недействительных символов, которые нельзя рассматривать как числа. Итак, в такой строке: "Scott7Marcy9", вы получите NaN.

0

Файлы cookie сохраняются как строковые значения, как вы догадались. Чтобы получить желаемый эффект, вам нужно проанализировать свою ценность. Если вы абсолютно уверены, что это будет целое число, использование:

parseInt(value) + 1 
Смежные вопросы