摘要:數(shù)據(jù)類型判斷有的時候需要判斷數(shù)據(jù)類型,應(yīng)對各種復(fù)雜的邏輯判斷,先來個咱們最常用的。操作符返回一個字符串,并表示該變量的類型。運算符用于測試構(gòu)造函數(shù)的屬性是否出現(xiàn)在對象的原型鏈中的任何位置通俗點說就是一個變量是否某個對象的實例。
JS數(shù)據(jù)類型判斷
有的時候需要判斷數(shù)據(jù)類型,應(yīng)對各種復(fù)雜的邏輯判斷,先來個咱們最常用的。
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
當然不只有上面的這些基礎(chǔ)類型,還有下面這些:
Symbol (ECMAScript 6 新增) "symbol" 宿主對象(由JS環(huán)境提供) Implementation-dependent 函數(shù)對象([[Call]] 在ECMA-262條款中實現(xiàn)了) "function"
咦?有點不對,為什么數(shù)組、null等都是object呢???請往下看
Function或者Array這些類型的實例的時候,其實都是基于Object實例進行的一種擴展。只是多了一些特有屬性。 在 JavaScript 最初的實現(xiàn)中,JavaScript 中的值是由一個表示類型的標簽和實際數(shù)據(jù)值表示的。對象的類型標簽是 0。 由于 null 代表的是 空指針(大多數(shù)平臺下值為 0x00)。 因此,null的類型標簽也成為了 0,typeof null就錯誤的返回了"object"。(reference)2.instanceof
instanceof運算符用于測試構(gòu)造函數(shù)的prototype屬性是否出現(xiàn)在對象的原型鏈中的任何位置,通俗點說就是一個變量是否某個對象的實例。
object instanceof constructor
object 要檢測的對象 / constructor 構(gòu)造函數(shù)
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()方法,當該對象被表示為一個文本值時,或者一個對象以預(yù)期的字符串方式引用時自動調(diào)用。默認情況下,toString()方法被每個Object對象繼承。如果此方法在自定義對象中未被覆蓋,toString() 返回 "[object type]",其中type是對象的類型。
Function.prototype.call( thisArg ) / Function.prototype.apply( thisArg )
傳遞要檢查的對象作為第一個參數(shù),稱為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]
在合適的場景用恰當?shù)姆椒?,會很省心,也能保證代碼的簡潔、健壯。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/102615.html
摘要:最近開始看源碼,并將源碼解讀放在了我的計劃中。今天就跟大家聊一聊中一些常用類型檢查方法,以及一些工具類的判斷方法。用是否含有屬性來判斷工具類判斷方法接下來看下一些常用的工具類判斷方法。 Why underscore 最近開始看 underscore.js 源碼,并將 underscore.js 源碼解讀 放在了我的 2016 計劃中。 閱讀一些著名框架類庫的源碼,就好像和一個個大師對話...
摘要:定義運算符用來判斷一個構(gòu)造函數(shù)的屬性所指向的對象是否存在另外一個要檢測對象的原型鏈上,用于引用類型。但其實,實例的來自于構(gòu)造函數(shù)的。 一、關(guān)于css 樣式優(yōu)先級: 行內(nèi)樣式>id選擇器樣式>類選擇器樣式>標簽選擇器樣式>通配符選擇器的樣式>繼承樣式>默認樣式 二、關(guān)于js 關(guān)于問題:**JavaScript中的所有事物都是對象??** 從typeof和instanceo...
摘要:內(nèi)置函數(shù)和對象中內(nèi)置了一些函數(shù)和對象,很多語言都會有內(nèi)置的方法,直接可以調(diào)用開發(fā)。根據(jù)語法標準提供的內(nèi)置函數(shù)包括和。注意基礎(chǔ)語法提供的內(nèi)置函數(shù)和方法只有這些,像那是瀏覽器提供給我們的。強制類型轉(zhuǎn)換大家應(yīng)該都知道。 js基礎(chǔ) - 變量 *大家對js一定不會陌生,入門很簡單(普通入門),很多人通過網(wǎng)絡(luò)資源、書籍、課堂等很多途徑學習js,但是有些js基礎(chǔ)的只是往往被大家遺漏,本章就從js變量...
摘要:內(nèi)置函數(shù)和對象中內(nèi)置了一些函數(shù)和對象,很多語言都會有內(nèi)置的方法,直接可以調(diào)用開發(fā)。根據(jù)語法標準提供的內(nèi)置函數(shù)包括和。注意基礎(chǔ)語法提供的內(nèi)置函數(shù)和方法只有這些,像那是瀏覽器提供給我們的。強制類型轉(zhuǎn)換大家應(yīng)該都知道。 js基礎(chǔ) - 變量 *大家對js一定不會陌生,入門很簡單(普通入門),很多人通過網(wǎng)絡(luò)資源、書籍、課堂等很多途徑學習js,但是有些js基礎(chǔ)的只是往往被大家遺漏,本章就從js變量...
摘要:所以我們又可以得出一個結(jié)論原型的屬性指向構(gòu)造函數(shù),構(gòu)造函數(shù)又通過屬性指回原型,但是并不是所有函數(shù)都具有這個屬性,就沒有這個屬性。 1.原始類型 boolean number string null undefined symbol原始類型儲存的都是值,是沒有函數(shù)可以調(diào)用的,undefined.toString() 顯示報錯,但是1.toString() // 1 ; 是因為1被強制轉(zhuǎn)...
閱讀 3134·2021-09-28 09:42
閱讀 3464·2021-09-22 15:21
閱讀 1136·2021-07-29 13:50
閱讀 3589·2019-08-30 15:56
閱讀 3378·2019-08-30 15:54
閱讀 1205·2019-08-30 13:12
閱讀 1188·2019-08-29 17:03
閱讀 1211·2019-08-29 10:59