JavaScript 判斷數(shù)據(jù)類型

toString 方法的主要用途是返回對象的字符串形式焚辅,除此之外州胳,還有一個重要的作用,就是判斷一個值的類型芳杏。

var o = {};
o.toString(); // "[object Object]"

上面代碼調(diào)用空對象的 toString 方法,結(jié)果返回一個字符串 object Object辟宗,其中第二個 Object 表示該值的準確類型爵赵。這是一個十分有用的判斷數(shù)據(jù)類型的方法。

實例對象的 toString 方法泊脐,實際上是調(diào)用 Object.prototype.toString 方法空幻。使用 call 方法,可以在任意值上調(diào)用 Object.prototype.toString 方法容客,從而幫助我們判斷這個值的類型秕铛。不同數(shù)據(jù)類型的 toString 方法返回值如下:

數(shù)值:返回 [object Number]则剃。
字符串:返回 [object String]
布爾值:返回 [object Boolean]如捅。
undefined:返回 [object Undefined]棍现。
null:返回 [object Null]
數(shù)組:返回 [object Array]镜遣。
arguments對象:返回 [object Arguments]己肮。
函數(shù):返回 [object Function]
Error對象:返回 [object Error]悲关。
Date對象:返回 [object Date]谎僻。
RegExp對象:返回 [object RegExp]
其他對象:返回 [object " + 構(gòu)造函數(shù)的名稱 + "]寓辱。

Object.prototype.toString.call(2) // "[object Number]"
Object.prototype.toString.call('') // "[object String]"
Object.prototype.toString.call(true) // "[object Boolean]"
Object.prototype.toString.call(undefined) // "[object Undefined]"
Object.prototype.toString.call(null) // "[object Null]"
Object.prototype.toString.call(Math) // "[object Math]"
Object.prototype.toString.call({}) // "[object Object]"
Object.prototype.toString.call([]) // "[object Array]"

可以利用這個特性艘绍,寫出一個比 typeof 運算符更準確的類型判斷函數(shù)。

var type = function (o){
  var s = Object.prototype.toString.call(o);
  return s.match(/\[object (.*?)\]/)[1].toLowerCase();
};

type({}); // "object"
type([]); // "array"
type(5); // "number"
type(null); // "null"
type(); // "undefined"
type(/abcd/); // "regex"
type(new Date()); // "date"

在上面這個 type 函數(shù)的基礎(chǔ)上秫筏,還可以加上專門判斷某種類型數(shù)據(jù)的方法诱鞠。

['Null',
 'Undefined',
 'Object',
 'Array',
 'String',
 'Number',
 'Boolean',
 'Function',
 'RegExp',
 'NaN',
 'Infinite'
].forEach(function (t) {
    type['is' + t] = function (o) {
        return type(o) === t.toLowerCase();
    };
});

type.isObject({}) // true
type.isNumber(NaN) // true
type.isRegExp(/abc/) // true
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市这敬,隨后出現(xiàn)的幾起案子航夺,更是在濱河造成了極大的恐慌,老刑警劉巖崔涂,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阳掐,死亡現(xiàn)場離奇詭異,居然都是意外死亡冷蚂,警方通過查閱死者的電腦和手機缭保,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝙茶,“玉大人艺骂,你說我怎么就攤上這事∈ⅲ” “怎么了彻亲?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵孕锄,是天一觀的道長吮廉。 經(jīng)常有香客問我,道長畸肆,這世上最難降的妖魔是什么宦芦? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮轴脐,結(jié)果婚禮上调卑,老公的妹妹穿的比我還像新娘抡砂。我一直安慰自己,他們只是感情好恬涧,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布注益。 她就那樣靜靜地躺著,像睡著了一般溯捆。 火紅的嫁衣襯著肌膚如雪丑搔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天提揍,我揣著相機與錄音啤月,去河邊找鬼。 笑死劳跃,一個胖子當著我的面吹牛谎仲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刨仑,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼郑诺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了杉武?” 一聲冷哼從身側(cè)響起间景,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎艺智,沒想到半個月后倘要,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡十拣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年封拧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夭问。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡泽西,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缰趋,到底是詐尸還是另有隱情捧杉,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布秘血,位于F島的核電站味抖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏灰粮。R本人自食惡果不足惜仔涩,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望粘舟。 院中可真熱鬧熔脂,春花似錦佩研、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至适秩,卻和暖如春袍暴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背隶症。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工政模, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蚂会。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓淋样,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胁住。 傳聞我的和親對象是個殘疾皇子趁猴,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內(nèi)容