脚本宝典收集整理的这篇文章主要介绍了js實例教程-javascript在使用中需要注意的幾點,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。小寶典致力於為廣大程序猿(媛)提供高品質的代碼服務,請大家多多光顧小站,小寶典在此謝過。
tyPEof
typeof運算符返回一個用於識別其運算數類型的字符串。所以:
typeof 98.6返回'number'。但遺憾的是:
typeof null返回'object',而不是null。
parseint
parseInt是一個把字符串轉換為整數的函數。它在遇到非數字時會停止解析,所以parseInt("16")與parseInt("16 tons")產生相同的結果。
如果該字符串第1個字符是0,那麼該字符串會基於八進制而不是十進制來求值。在八進制中,8和9不是數字,所以parseInt("08")和parseInt("09")都產生0作為結果。這個錯誤會導致程序解析日期和時間出現問題。幸運的是,parseInt可以接受一個基數作為參數,如此一來parseInt("08" ,10)結果為8 。
浮點數
二進制的浮點數不能正確地處理十進制的小數,因此0.1 + 0.2不等於0.3 。這是javascript中最經常被報告的bug,並且它是遵循二進制浮點算術標準IEEE 754而有意導致的結果。這個標準對很多應用都是適合的,但它違背了大多數你在中學所學過的關於數字的知識。幸運的是,浮點數中的整數運算是精確的,所以小數表現出來的錯誤可以通過指定精度來避免。
NaN
NaN是IEEE 754中定義的一個特殊的數量值。它表示的不是一個數字 ,儘管下面的表達式返回的是true:
typeof NaN === 'number' //true
該值可能會在試圖把非數字形式的字符串轉換為數字時產生。例如:
+ '0' //0 + 'oops' NaN
如果NaN是數學運算中的一個運算數,那麼結果就是NaN。所以,如果你有一個公式鏈產生出NaN的結果,那肯定要麼其中一個輸入項是NaN,要麼在某個地方產生了NaN。
你可以對NaN進行檢測。正如我們之前所見,typeof不能辨識數字和NaN,而且NaN也不等同於它自己。所以,下面的代碼結果令人驚訝:
NaN === NaN //false NaN !== NaN //true
javascript提供了一個isNaN函數,可以辨識數字與NaN:
isNaN(NaN) //true isNaN(0) //false isNaN('oops') //true isNaN('0') //false
判斷一個值是否可用作數字的最佳方法是使用isFinITe函數,因為它會篩除掉NaN和Infinity。遺憾的是,isFinite會試圖把它的運算數轉換為一個數字,所以,如果值事實上不是一個數字,它就不是一個好的測試。你可以這樣定義自己的isNumber函數:
VAR isNumber = function isNumber(value) { return typeof value === 'number' && isFinite(value); }
偽數組
javascript沒有真正的數組。這也不全是壞事。javascript的數組確實非常容易使用。你不必給它們設置維度,而且它們永遠不會產生越界錯誤。但它們的性能比真正的數組可能相當糟糕。
typeof運算符不能辨別數組和對象。要判斷一個值是否為數組,你還需要檢查它的constructor屬性:
if (my_value && typeof my_value === 'object' && my_value.constructor === Array) { //my_value是一個數組 }
上面的檢測對於在不同幀或窗口創建的數組將會給出false。當數組有可能在其他的幀中被創建時,下面的檢測更為可靠:
if (Object.PRototype.toString.apply(my_value) === '[object Array]'){ //my_value確實是一個數組! }
arguments數組不是一個數組,它只是一個有着length成員屬性的對象。上面的檢測會分辨出arguments並不是一個數組。
javascript有兩組相等運算符:===和!==,以及它們邪惡的孿生兄弟==和!=。===和!==這一組運算符會按照你期望的方式工作。如果兩個運算數類型一致且擁有相同的值,那麼===返回true,!==返回false。而它們邪惡的孿生兄弟只有在兩個運算數類型一致時才會做出正確的判斷,如果兩個運算數是不同的類型,它們試圖去強制轉換值的類型。轉換的規則複雜且難以記憶。
'' == '0' //false 0 == ''//true 0 == '0' //true false == 'false' //false false == '0' //true false == undefined //false false == null //false null == undefined //true ' /t/r/n ' == 0 //true
==運算符對傳遞性的缺乏值得我們警惕。始終用===和!==。如果以上所有的比較使用===運算符,結果都是false。
eval
eval函數傳遞一個字符串給javascript編譯器,並且執行其結果。它是一個被濫用得最多的javascript特性。那些對javascript語言一知半解的人們最常用到它。例如,如果你知道點表示法,但不知道下標表示法,就可能會這麼寫:
eval("myValue = myObject." + myKey + ";");
而不是這麼寫:
myvalue = myObject[myKey];
使用eval形式的代碼更難以閱讀。這種形式使得性能顯著降低,因為它需要運行編譯器,但也許只是為了執行一個微不足道的賦值語句。
瀏覽器提供的setTimeout和setInterval函數,它們能接受字符串參數或函數參數。當傳遞的是字符串參數時,setTimeout和setInterval會像eval那樣去處理。同樣也應該避免使用字符串參數形式。
typeof
typeof運算符返回一個用於識別其運算數類型的字符串。所以:
typeof 98.6返回'number'。但遺憾的是:
typeof null返回'object',而不是null。
parseInt
parseInt是一個把字符串轉換為整數的函數。它在遇到非數字時會停止解析,所以parseInt("16")與parseInt("16 tons")產生相同的結果。
如果該字符串第1個字符是0,那麼該字符串會基於八進制而不是十進制來求值。在八進制中,8和9不是數字,所以parseInt("08")和parseInt("09")都產生0作為結果。這個錯誤會導致程序解析日期和時間出現問題。幸運的是,parseInt可以接受一個基數作為參數,如此一來parseInt("08" ,10)結果為8 。
浮點數
二進制的浮點數不能正確地處理十進制的小數,因此0.1 + 0.2不等於0.3 。這是javascript中最經常被報告的bug,並且它是遵循二進制浮點算術標準IEEE 754而有意導致的結果。這個標準對很多應用都是適合的,但它違背了大多數你在中學所學過的關於數字的知識。幸運的是,浮點數中的整數運算是精確的,所以小數表現出來的錯誤可以通過指定精度來避免。
NaN
NaN是IEEE 754中定義的一個特殊的數量值。它表示的不是一個數字 ,儘管下面的表達式返回的是true:
typeof NaN === 'number' //true
該值可能會在試圖把非數字形式的字符串轉換為數字時產生。例如:
+ '0' //0 + 'oops' NaN
如果NaN是數學運算中的一個運算數,那麼結果就是NaN。所以,如果你有一個公式鏈產生出NaN的結果,那肯定要麼其中一個輸入項是NaN,要麼在某個地方產生了NaN。
你可以對NaN進行檢測。正如我們之前所見,typeof不能辨識數字和NaN,而且NaN也不等同於它自己。所以,下面的代碼結果令人驚訝:
NaN === NaN //false NaN !== NaN //true
javascript提供了一個isNaN函數,可以辨識數字與NaN:
isNaN(NaN) //true isNaN(0) //false isNaN('oops') //true isNaN('0') //false
判斷一個值是否可用作數字的最佳方法是使用isFinite函數,因為它會篩除掉NaN和Infinity。遺憾的是,isFinite會試圖把它的運算數轉換為一個數字,所以,如果值事實上不是一個數字,它就不是一個好的測試。你可以這樣定義自己的isNumber函數:
var isNumber = function isNumber(value) { return typeof value === 'number' && isFinite(value); }
偽數組
javascript沒有真正的數組。這也不全是壞事。javascript的數組確實非常容易使用。你不必給它們設置維度,而且它們永遠不會產生越界錯誤。但它們的性能比真正的數組可能相當糟糕。
typeof運算符不能辨別數組和對象。要判斷一個值是否為數組,你還需要檢查它的constructor屬性:
if (my_value && typeof my_value === 'object' && my_value.constructor === Array) { //my_value是一個數組 }
上面的檢測對於在不同幀或窗口創建的數組將會給出false。當數組有可能在其他的幀中被創建時,下面的檢測更為可靠:
if (Object.prototype.toString.apply(my_value) === '[object Array]'){ //my_value確實是一個數組! }
arguments數組不是一個數組,它只是一個有着length成員屬性的對象。上面的檢測會分辨出arguments並不是一個數組。
javascript有兩組相等運算符:===和!==,以及它們邪惡的孿生兄弟==和!=。===和!==這一組運算符會按照你期望的方式工作。如果兩個運算數類型一致且擁有相同的值,那麼===返回true,!==返回false。而它們邪惡的孿生兄弟只有在兩個運算數類型一致時才會做出正確的判斷,如果兩個運算數是不同的類型,它們試圖去強制轉換值的類型。轉換的規則複雜且難以記憶。
'' == '0' //false 0 == ''//true 0 == '0' //true false == 'false' //false false == '0' //true false == undefined //false false == null //false null == undefined //true ' /t/r/n ' == 0 //true
==運算符對傳遞性的缺乏值得我們警惕。始終用===和!==。如果以上所有的比較使用===運算符,結果都是false。
eval
eval函數傳遞一個字符串給javascript編譯器,並且執行其結果。它是一個被濫用得最多的javascript特性。那些對javascript語言一知半解的人們最常用到它。例如,如果你知道點表示法,但不知道下標表示法,就可能會這麼寫:
eval("myValue = myObject." + myKey + ";");
而不是這麼寫:
myvalue = myObject[myKey];
使用eval形式的代碼更難以閱讀。這種形式使得性能顯著降低,因為它需要運行編譯器,但也許只是為了執行一個微不足道的賦值語句。
瀏覽器提供的setTimeout和setInterval函數,它們能接受字符串參數或函數參數。當傳遞的是字符串參數時,setTimeout和setInterval會像eval那樣去處理。同樣也應該避免使用字符串參數形式。
覺得可用,就經常來吧!Javascript技巧 腳本寶典 歡迎評論哦! js技巧,巧奪天工,精雕玉琢。小寶典獻醜了!
以上是脚本宝典为你收集整理的js實例教程-javascript在使用中需要注意的幾點全部内容,希望文章能够帮你解决js實例教程-javascript在使用中需要注意的幾點所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。