摘要:操作符是最常見的類型判斷方法,但其有局限性,只能判斷基本數(shù)據(jù)類型,對(duì)于數(shù)組,日期等對(duì)象無法區(qū)分,統(tǒng)一顯示為。配合,改變方法執(zhí)行時(shí)的所在的環(huán)境,可以得到對(duì)象的精確類型。
typeof操作符是最常見的類型判斷方法,但其有局限性,只能判斷基本數(shù)據(jù)類型,對(duì)于數(shù)組,日期等對(duì)象無法區(qū)分,統(tǒng)一顯示為object。
typeof []; //object typeof new Date(); //object
使用toString()可以解決這個(gè)問題
toString基本用法toString()是定義在Object.prototype上的實(shí)例方法,所有實(shí)例對(duì)象繼承了該方法,其可以返回一個(gè)對(duì)象的字符串形式。
{}.toString(); // "[object Object]" {a:1}.toString(); // "[object Object]"
對(duì)于空對(duì)象和一般對(duì)象,toString方法會(huì)繼承于Object.prototype.toString,默認(rèn)返回[object Object],其中第二個(gè)Object是該對(duì)象的構(gòu)造函數(shù),那么根據(jù)這個(gè)值可以判斷數(shù)據(jù)類型。
"abc".toString(); // "abc" [1,2].toString(); // "1,2" new Date().toString(); // "Sun Mar 24 2019 16:08:58 GMT+0800"
然而很明顯字符串、數(shù)組、Date等對(duì)象擁有自定義的toString方法,會(huì)覆蓋Object.prototype.toString方法。
使用call()可以直接使用Object.prototype.toString方法來獲得類型,但由于是在Object對(duì)象環(huán)境中使用方法,所有對(duì)象都會(huì)顯示[object Object]。
配合call(),改變toString方法執(zhí)行時(shí)的所在的環(huán)境,可以得到對(duì)象的精確類型。
Object.prototype.toString.call("") // "[object String]" Object.prototype.toString.call([]) // "[object Array]" Object.prototype.toString.call(new Date()) // "[object Date]"類型判斷函數(shù)
返回的字符串中去掉前面object就是對(duì)象的類型,可以寫一個(gè)比typeof更好的類型判斷函數(shù)
function type(object){ let s = Object.prototype.toString.call(object); return s.match(/[object (.*?)]/)[1].toLowerCase(); } console.log(type(new Date())); // date
上面代碼用正則表達(dá)式匹配得到類型,然后將類型字符串小寫。
改進(jìn)前面的程序,可以用遍歷數(shù)據(jù)的方式得到判斷某種特定的類型數(shù)據(jù)的方法。
function type(object){ var s = Object.prototype.toString.call(object); return s.match(/[object (.*?)]/)[1].toLowerCase(); }; ["Null","Undefined","Object","Array","String","Number","Boolean","Function","RegExp" ].forEach(function(t){ type["is"+t] = function(object){ return type(object) === t.toLowerCase(); }; }); console.log(type.isArray([])); // true
參考
https://wangdoc.com/javascrip...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/102910.html
摘要:可用于判斷多種數(shù)據(jù)類型基本數(shù)據(jù)類型和內(nèi)置對(duì)象,然而對(duì)于一些自定義構(gòu)造函數(shù)生成的對(duì)象就不能進(jìn)行判斷了。判斷是不是所有數(shù)據(jù)類型中,只有不等于它本身判斷數(shù)組的方法除了上文提到的三種方法可判斷外,還有一個(gè)構(gòu)造函數(shù)自帶的方法可判斷。 數(shù)據(jù)類型的分類 要想判斷數(shù)據(jù)類型,首先要知道數(shù)據(jù)類型的分類。數(shù)據(jù)類型分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。 基本數(shù)據(jù)類型 基本數(shù)據(jù)類型有 五 種,ES6中新加了第 六 種...
摘要:比如我們今天要討論的,在當(dāng)中如何判斷一個(gè)數(shù)組是數(shù)組。在數(shù)組的原型鏈上也能找到構(gòu)造函數(shù)由上面的幾行代碼可以看出,使用運(yùn)算符可以分辨數(shù)組和對(duì)象,可以判斷數(shù)組是數(shù)組。用判斷實(shí)例化的數(shù)組擁有一個(gè)屬性,這個(gè)屬性指向生成這個(gè)數(shù)組的方法。 如果你沒有注意過這個(gè)問題,那么這個(gè)標(biāo)題應(yīng)該會(huì)讓你感到困惑,判斷數(shù)據(jù)類型這么基礎(chǔ)的問題能有什么坑呢? 少年,你不能太天真了,我們朝夕面對(duì)的這門語言,可是JavaSc...
摘要:的數(shù)據(jù)類型,共有六種。通常,數(shù)值字符串布爾值這三種類型,合稱為原始類型的值,即它們是最基本的數(shù)據(jù)類型,不能再細(xì)分了。運(yùn)算符返回一個(gè)布爾值,表示某個(gè)對(duì)象是否為指定的構(gòu)造函數(shù)的實(shí)例。 以下內(nèi)容摘自阮一峰-JavaScript-標(biāo)準(zhǔn)參考教程 數(shù)據(jù)類型 JavaScript 語言的每一個(gè)值,都屬于某一種數(shù)據(jù)類型。JavaScript 的數(shù)據(jù)類型,共有六種。(ES6 又新增了第七種 Symbo...
摘要:控制對(duì)象狀態(tài)的方法防止對(duì)象擴(kuò)展。判斷一個(gè)對(duì)象是否被凍結(jié)。返回當(dāng)前對(duì)象對(duì)應(yīng)的值。方法的作用是返回一個(gè)對(duì)象的字符串形式上面代碼表示,對(duì)于一個(gè)對(duì)象調(diào)用方法,會(huì)返回字符串用途通過自定義方法,可以讓對(duì)象在自動(dòng)類型轉(zhuǎn)換時(shí),得到想要的字符串形式。 概述Object()Object 構(gòu)造函數(shù)Object 的靜態(tài)方法「本身的方法Object.keys(),Object.getOwnPropertyNam...
摘要:對(duì)象類型常見的有,,,正則新增自己提供的樂行判斷如果不對(duì)對(duì)象做嚴(yán)格區(qū)分使用。的實(shí)現(xiàn)使用了原型繼承的表示左表達(dá)式,表示右表達(dá)式,它是用是否等于來判斷對(duì)象的類型的。常見框架和庫的實(shí)數(shù)據(jù)類型判斷測(cè)試這里將的實(shí)現(xiàn)原理抽取出來,用原生實(shí)現(xiàn)。 JavaScript一共有六種數(shù)據(jù)類型,分為原始類型(又名基本類型)和對(duì)象類型(又名引用類型) 原始類型有五種,分別為number,string,boole...
閱讀 2882·2021-11-24 09:39
閱讀 2611·2021-11-23 09:51
閱讀 2221·2021-11-17 09:33
閱讀 1849·2021-10-22 09:54
閱讀 1935·2021-08-16 11:00
閱讀 3529·2019-08-30 15:53
閱讀 1793·2019-08-30 13:19
閱讀 2965·2019-08-30 12:49