2011-04-07 41 views
1

所以我試圖在for語句中增加一個變量,然後給它添加一個整數......但由於某種原因,它將整數加起來就像它是一個字符串一樣;像減法或乘法等其他操作按預期工作。jQuery:爲什麼一個整數被添加到像字符串的變量?

這是怎麼發生的?編輯:我已經添加了整個功能;有問題的地方是我嘗試向變量x添加2。

什麼讓我困惑的是,我能夠爲x沒有問題的使用,例如在發生.EQ()對象...

$(function() { 
    $('textarea').bind('paste', function (e){ 
     inputGroup = $(this).parent(); 
     var ob = $(this); 
     if (e.type == 'paste'){ 
      setTimeout(function(){ 
       var data = ob.val(); 
       var tabbed = data.replace(/\n/g, "\t"); 
       var cells = tabbed.split("\t"); 
       for(var x in cells) { 
        foo = x + 2; 
        alert(foo); 
        $(inputGroup).find('input').eq(x).val(cells[x]); 
       } 
      }, 1); 
     } 
    }); 
}); 
+1

如何'被定義cells'? – Justin808 2011-04-07 01:00:33

+0

你不需要所有這些變量。只是:'var cells = ob.val()。replace(...)。split('\ t');' – 2011-04-07 01:09:55

+0

@Sime:hehe thanks。我仍然在研究這個代碼,所以有一些膨脹。 – 2011-04-07 01:15:18

回答

5

這究竟是爲什麼?

因爲x是一個看起來像數字的字符串。投射到Number第一,你就會得到結果,你希望:

"1" + 2 = "12" 
Number("1") + 2 = 3 

編輯:現在,我看到你正在使用split將一個字符串到一個數組,你的問題是絕對,你是連接字符串。首先投射到Number,並解決您的問題。

是的,其他的算術運算會起作用,因爲它們會隱式地將操作數轉換爲數字。令人困惑的是,"2" * 3實際上將評估爲整數6。歡迎使用Javascript。

-tjw

+1

@Travis一元'+'運算符是'Number()'的簡寫形式:'+'1'+ 2 === 3' – 2011-04-07 01:05:39

+0

怪異...看起來奇怪的是,在這種情況下,x會是一個字符串,因爲x被用來計算數組。 – 2011-04-07 01:09:37

+2

@Sime真的,謝謝你指出。我使用完整的單詞,因爲我喜歡它,因爲其他人可以真正閱讀和理解我的Javascript,而不必考慮它是否真的用Perl編寫。 – 2011-04-07 01:09:41

0

因爲+是一個字符串連接但沒有等價的字符串方法爲*/,所以當使用它們將該值作爲數字進行投射時。只投x爲整數:

for(var x in cells) { 
    foo = parseInt(x, 10) + 2; 
    $(inputGroup).find('input').eq(foo).val(cells[x]); 
} 

parseInt10是說使用基座10的數字系統(相對於十六進制16,例如)。

2

沒有更多的代碼,特別是單元格的初始化,我不能告訴你確切的原因。但是你可以簡單地調用xparseInt()把它變成一個整數加法

for(var x in cells) { 
    foo = parseInt(x, 10) + 2; 
    $(inputGroup).find('input').eq(foo).val(cells[x]); 
} 
+0

使用parseInt時,請始終指定基數:'parseInt(x,10)'。 – 2011-04-07 01:07:06

0

正如其他人所說,x一個字符串。這就是爲什麼。

有鑄造字符串作爲JavaScript中的數字一個很好的技巧,還沒有被提及,雖然:

for(var x in cells) { 
    // Without the "var" here, you're setting a global 
    // variable during each loop iteration. 
    var foo = +x + 2; 

    $(inputGroup).find('input').eq(foo).val(cells[x]); 
} 
+0

你的語法技巧會讓其他人的眼睛流血。 「數字」更具可讀性。 – 2011-04-07 01:19:28

+0

如果你的眼睛流血了,你應該遠離鍵盤看醫生!使用一元運算符是一段長時間使用它的非常流行的JavaScript。 – 2011-04-07 02:23:33

相關問題