相同的变量(119),相同的常数(100)。在使用减法和乘法运算符时,两者都被正确解释为数字,但在使用加法运算符时则不然 - 结果是字符串(119100)。但是,当我使用加法运算符应用parseFloat函数时,我得到了正确的结果(219)。 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
})
答案 0 :(得分: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,
});