摘要:數據類型判斷有的時候需要判斷數據類型,應對各種復雜的邏輯判斷,先來個咱們最常用的。操作符返回一個字符串,并表示該變量的類型。運算符用于測試構造函數的屬性是否出現在對象的原型鏈中的任何位置通俗點說就是一個變量是否某個對象的實例。
JS數據類型判斷
有的時候需要判斷數據類型,應對各種復雜的邏輯判斷,先來個咱們最常用的。
1.typeoftypeof操作符返回一個字符串,并表示該變量的類型。
typeof oper / typeof (operand)
var testString = "adus", testArray = [], testBoolean = true, testNumber = 0, testObject = {}, testNull = null, testUndefined = undefined console.log(typeof testString);//string console.log(typeof testArray);//object console.log(typeof testBoolean);//boolean console.log(typeof testNumber);//number console.log(typeof testObjec);//object console.log(typeof testNull);//object console.log(typeof testUndefined);//undefined
當然不只有上面的這些基礎類型,還有下面這些:
Symbol (ECMAScript 6 新增) "symbol" 宿主對象(由JS環(huán)境提供) Implementation-dependent 函數對象([[Call]] 在ECMA-262條款中實現了) "function"
咦?有點不對,為什么數組、null等都是object呢???請往下看
Function或者Array這些類型的實例的時候,其實都是基于Object實例進行的一種擴展。只是多了一些特有屬性。 在 JavaScript 最初的實現中,JavaScript 中的值是由一個表示類型的標簽和實際數據值表示的。對象的類型標簽是 0。 由于 null 代表的是 空指針(大多數平臺下值為 0x00)。 因此,null的類型標簽也成為了 0,typeof null就錯誤的返回了"object"。(reference)2.instanceof
instanceof運算符用于測試構造函數的prototype屬性是否出現在對象的原型鏈中的任何位置,通俗點說就是一個變量是否某個對象的實例。
object instanceof constructor
object 要檢測的對象 / constructor 構造函數
function fnc(){} var newFnc = new fnc(); console.log(newFnc.__proto__ == fnc.prototype);//true console.log( newFnc instanceof fnc ) //true /*String對象和Date對象都屬于Object類型和一些特殊情況*/ var simpleStr = "This is a simple string"; var myString = new String(); var newStr = new String("String created with constructor"); var myDate = new Date(); var myObj = {}; var myNonObj = Object.create(null); simpleStr instanceof String; // 返回 false, 檢查原型鏈會找到 undefined myString instanceof String; // 返回 true newStr instanceof String; // 返回 true myString instanceof Object; // 返回 true myObj instanceof Object; // 返回 true, 盡管原型沒有定義 ({}) instanceof Object; // 返回 true, 同上 myNonObj instanceof Object; // 返回 false, 一種創(chuàng)建對象的方法,這種方法創(chuàng)建的對象不是Object的一個實例 myString instanceof Date; //返回 false myDate instanceof Date; // 返回 true myDate instanceof Object; // 返回 true myDate instanceof String; // 返回 false3.Object.prototype.toString()
每個對象都有一個toString()方法,當該對象被表示為一個文本值時,或者一個對象以預期的字符串方式引用時自動調用。默認情況下,toString()方法被每個Object對象繼承。如果此方法在自定義對象中未被覆蓋,toString() 返回 "[object type]",其中type是對象的類型。
Function.prototype.call( thisArg ) / Function.prototype.apply( thisArg )
傳遞要檢查的對象作為第一個參數,稱為thisArg。
var toString = Object.prototype.toString; toString.call(new Date); // [object Date] toString.call(new String); // [object String] toString.call(Math); // [object Math] //Since JavaScript 1.8.5 toString.call(undefined); // [object Undefined] toString.call(null); // [object Null]
在合適的場景用恰當的方法,會很省心,也能保證代碼的簡潔、健壯。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://www.ezyhdfw.cn/yun/102615.html
摘要:最近開始看源碼,并將源碼解讀放在了我的計劃中。今天就跟大家聊一聊中一些常用類型檢查方法,以及一些工具類的判斷方法。用是否含有屬性來判斷工具類判斷方法接下來看下一些常用的工具類判斷方法。 Why underscore 最近開始看 underscore.js 源碼,并將 underscore.js 源碼解讀 放在了我的 2016 計劃中。 閱讀一些著名框架類庫的源碼,就好像和一個個大師對話...
摘要:內置函數和對象中內置了一些函數和對象,很多語言都會有內置的方法,直接可以調用開發(fā)。根據語法標準提供的內置函數包括和。注意基礎語法提供的內置函數和方法只有這些,像那是瀏覽器提供給我們的。強制類型轉換大家應該都知道。 js基礎 - 變量 *大家對js一定不會陌生,入門很簡單(普通入門),很多人通過網絡資源、書籍、課堂等很多途徑學習js,但是有些js基礎的只是往往被大家遺漏,本章就從js變量...
摘要:內置函數和對象中內置了一些函數和對象,很多語言都會有內置的方法,直接可以調用開發(fā)。根據語法標準提供的內置函數包括和。注意基礎語法提供的內置函數和方法只有這些,像那是瀏覽器提供給我們的。強制類型轉換大家應該都知道。 js基礎 - 變量 *大家對js一定不會陌生,入門很簡單(普通入門),很多人通過網絡資源、書籍、課堂等很多途徑學習js,但是有些js基礎的只是往往被大家遺漏,本章就從js變量...
摘要:所以我們又可以得出一個結論原型的屬性指向構造函數,構造函數又通過屬性指回原型,但是并不是所有函數都具有這個屬性,就沒有這個屬性。 1.原始類型 boolean number string null undefined symbol原始類型儲存的都是值,是沒有函數可以調用的,undefined.toString() 顯示報錯,但是1.toString() // 1 ; 是因為1被強制轉...
閱讀 3235·2021-09-28 09:42
閱讀 3526·2021-09-22 15:21
閱讀 1209·2021-07-29 13:50
閱讀 3756·2019-08-30 15:56
閱讀 3442·2019-08-30 15:54
閱讀 1265·2019-08-30 13:12
閱讀 1259·2019-08-29 17:03
閱讀 1261·2019-08-29 10:59