2013-05-30 1 views
0

То же значение (119), то же константа (100). Оба они правильно интерпретируются как числа при использовании операторов вычитания и умножения, однако это не так при использовании оператора сложения - результатом является строка (119100). Однако, когда я применяю функцию parseFloat с оператором сложения, я получаю правильный результат (219). Является ли Jquery интерпретировать оператор «+» как конкатенатор строк?Номер JQuery выражает строку только с оператором сложения

var newvotes = 0; 

$(document).ready(function(e) { 

//alert(1); 


$('.vote').children().click(function(e) { 
e.preventDefault(e); 
var vote = $(this).text(); 
var timestamp = 1369705456; 

$.ajax({ 
type: 'POST', 
url: 'forumvote.php', 
data: {'timestamp' : timestamp, 'vote': vote}, 
success: function(data, textStatus) { 
    newvotes = data; 

}, 

//dataType: 'text', 
async:false, 
}); 

alert(newvotes); //119 
var newvar = newvotes*100; 
var newvar2 = newvotes-100; 
var newvar3 = newvotes+100; 
var newvar4 = parseFloat(newvotes) + parseFloat(100); 
alert(newvar); //11900 ok 
alert(newvar2); //19 ok 
alert(newvar3); //119100 returns as a string 
alert(newvar4); //219 ok 

})

ответ

1

Его вина не jQueries. Это именно то, что делает Javascript.

Если вы посмотрите на тип newVotes, вы найдете его строку. (typeof(newVotes)). Бинарные операторы * и - преобразуют свои аргументы в числа. Бинарный оператор +, если любой из аргументов представляет собой строку, преобразует остальные аргументы в строки. В противном случае он преобразует их в числа.

Так все, что вам нужно сделать, это преобразовать данные в ряд в вашем успехе обратного вызова, и все будет работать для вас:

$.ajax({ 
type: 'POST', 
url: 'forumvote.php', 
data: {'timestamp' : timestamp, 'vote': vote}, 
success: function(data, textStatus) { 
    newvotes = parseFloat(data); 

}, 

//dataType: 'text', 
async:false, 
}); 
+0

Спасибо. Хороший надежный ответ. – user2232681