天天看點

最近在JS和Jquery遇到的一些問題的解決方法(2009-03-31)

1. JS中數值字元串相加

var a='2.1'; var b='13';

var c=a+b; 則c的值為 2.113,因為+在字元串間是連接配接符。

如果要求a與b的和,則先要把a、b用parseFloat()或parseInt()轉化為浮點數、整數

黑客方法 var c=a-0+b; 因為 – 不管是在數值還是字元串間都是減法運算,對字元串JS會自動把它轉化為數值。

2. JS中浮點數的多餘的精度

var a= 2.6; var b=2.3;

var c = a-b;

那麼c的值是多少?0.3?不對,它的值是 0.3000005 0.29999997之類,總之就是不等于0.3。汗!

産生這個情況的原因是浮點數在JS中的存儲方式,不僅JS,嚴格符合ECAMScript規範的腳本語言都有相同的問題。

解決方法 var c = Math.round((a-b)*10)/10; 産生一位小數的精度。

為什麼不直接用 (a-b)*10/10?因為當 c=0.29999997時,計算結果變成了我們不想看到的0.2。

3. Jquery中什麼時候用$(this),什麼時候不存在$(this)?

看看這個例子,點選切換圖檔。

$(function(){
$(img).bind('click', function(e){
    $.ajax({
        'url':'http://www.declab.com/?id='+$(this).val(),
        'success':function(html){ $(img).attr('src','http://www.declab.com/images'+html) },
        'cache':false
        });
    });
});
      

在這段代碼中, 'url'中的 $(this) 和 'success'函數中的$(img) 都是指代碼開頭被點選的$(img),

但你不可以把第二個$(img)也換成$(this),它屬于函數function(html){}的局部變量,已經出了function(e){}的作用域。

繼續閱讀