頻道欄目
首頁 > 資訊 > JavaScript > 正文

莫名其妙的運算問題

12-05-17        來源:[db:作者]  
收藏   我要投稿

今天遇到一個很奇怪的問題,我花費了N個小時才找到這個問題,但是這個問題本身卻讓我十分郁悶,接下來我們看這個問題。

描述:

需求是這樣的:要把下面這個圖片中列表里面的數據做統計,“當前頁面統計”行是用javascript實現的,就是累加每個td中的數據然后賦給統計行的相應td,其中用到了jQuery。

 問題



 

這個過程看起來很簡單,但是就是因為這簡單的過程中出現了不可思議的問題,下面我們看代碼:

1. <script type="text/javascript">  
2. $(function(){  
3.     var regex = /\d+\.*\d*/;  
4.     var trlen = $("#datalist > tbody > tr").length - 3;  
5.     $("#datalist > tbody > tr").each(function(i, elementf) {  
6.         if (i < trlen) {  
7.             $(elementf).children("td").each(function(j, elements) {  
8.                 if (j > 1 && j < 14) {//textContent  
9.                     var context = regex.exec($("#cursum").children("td").get(j-1).textContent)*1 + (regex.exec($(elements).text())==null?0:regex.exec($(elements).text())*1;  
10.                     $("#cursum").children("td").get(j-1).textContent=context;  
11.                 }  
12.             });  
13.         }  
14.     });  
15. });  
16. </script> 
其中最關鍵的代碼是:

1. var context = regex.exec($("#cursum").children("td").get(j-1).textContent)*1 + (regex.exec($(elements).text())==null?0:regex.exec($(elements).text())*1;  
2.                     $("#cursum").children("td").get(j-1).textContent=context; 
它的作用就是循環每個td累加到統計行的td。
 
而出問題的代碼是:

1. var context = regex.exec($("#cursum").children("td").get(j-1).textContent)*1 + (regex.exec($(elements).text())==null?0:regex.exec($(elements).text())*1; 
它的作用就是得到當前循環的td中的值,并且得到此時統計行對應td的值然后相加重新賦給統計行的td,開始的時候我是這樣寫算式的,結果產生的問題是執行這一行代碼之后context的值永遠都是 “+” 號后算式的值,而不會把“+” 號前面算式的值加上去,也就是說:

1. var context = 1 + 2;  
2. //執行后context的值為2,而不是3 
這很讓人郁悶我試了幾次都是如此,后來問了一下同事,嘗試不同方法,最后終于搞定了,代碼是這樣的:

1. var context = (regex.exec($("#cursum").children("td").get(j-1).textContent)*1) + (regex.exec($(elements).text())==null?0:regex.exec($(elements).text())*1); 
其實就是把 “+” 號前半部分和后半部分各自加上小括號就可以了,這讓我無法理解,是javascript解析算式有問題,還是我對javascript解析算是的特征不懂呢,不知道,還是請高手指點啊。
 
總結:
不過這也讓我對javascript語言的安全性產生很大的懷疑,還有就是希望NODEJS不是如此。

 


摘自 DolphinBoy

相關TAG標簽
上一篇:臺積電:絕大多數7nm客戶都會轉向6nm_IT新聞_博客園
下一篇:最后一頁
相關文章
圖文推薦

關于我們 | 聯系我們 | 廣告服務 | 投資合作 | 版權申明 | 在線幫助 | 網站地圖 | 作品發布 | Vip技術培訓 | 舉報中心

版權所有: 紅黑聯盟--致力于做實用的IT技術學習網站

美女MM131爽爽爽毛片