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