標籤:empty test ... 一個 資料類型 boolean 類型比較 strong func
扒開JQuery以及其他一些JS架構源碼,常常能看到下面這樣的判斷,
寫慣了C#進階語言文法的我,一直以來沒能系統的理解透這段代碼。
var test; //do something... if(test){ //do something... }
此處就系統的記錄一下這個JS特殊值與boolean類型的轉換,測試代碼與結果如下
window.onload = function () { var minusNum = -1; var zero = 0; var one = 1; var stringEmpty = ‘‘; var stringNotEmpty = ‘111‘; var objFunc = function () { }; console.group("JS中特殊值與bool的轉換"); undefined ? console.info("undefined is true") : console.info("undefined is false"); null ? console.info("null is true") : console.info("null is false"); minusNum ? console.info("負數 is true") : console.info("負數 is false"); zero ? console.info("zero(數字0) is true") : console.info("zero(數字0) is false"); stringNotEmpty ? console.info("stringNotEmpty is true") : console.info("stringNotEmpty is false"); stringEmpty ? console.info("stringEmpty is true") : console.info("stringEmpty is false"); objFunc ? console.info("objFunc is true") : console.info("objFunc is false"); NaN ? console.info("NaN is true") : console.info("NaN is false"); console.groupEnd();}
==和===的區別
判斷自然離不開==,同時引用記錄一下。原文:http://blog.sina.com.cn/s/blog_4b32835b01014iv9.html
1、對於string,number等基礎類型,==和===是有區別的
1)不同類型間比較,==之比較“轉化成同一類型後的值”看“值”是否相等,===如果類型不同,其結果就是不等
2)同類型比較,直接進行“值”比較,兩者結果一樣
2、對於Array,Object等進階類型,==和===是沒有區別的
進行“指標地址”比較
3、基礎類型與進階類型,==和===是有區別的
1)對於==,將進階轉化為基礎類型,進行“值”比較
2)因為類型不同,===結果為false
typeof和instanceof
1、typeof用於檢查變數的資料類型,返回一個字串。
typeof 返回字串,有7種可能:"number"、"string"、"boolean"、"object"、"function"、"undefined" 、"symbol",
typeof 檢查的變數是一個對象,或者是 Null,那它就會返回 object。
2、instanceof是為了看一個變數是否是某個對象的執行個體,返回一個布爾值。
instanceof只能用來判斷對象和函數等物件類型,不能用來判斷字串和數字等基礎類型。
學習小記:JS判斷時特殊值與boolean類型的轉換