JavaScript數(shù)據(jù)類型判斷之Object.prototype.toString.call() 的詳解(示例)
Object.prototype.toString.call()
的詳解
Object.prototype.toString.call()
是 JavaScript 中判斷數(shù)據(jù)類型的強(qiáng)大方法。它可以精確區(qū)分所有的 JavaScript 內(nèi)置類型,包括原始類型和對(duì)象類型。
語法
Object.prototype.toString.call(value)
value
是要檢測(cè)類型的變量。- 返回結(jié)果是一個(gè)類似
"[object Type]"
的字符串,其中Type
是該變量的類型名稱。
為什么使用它?
- 準(zhǔn)確性:它可以區(qū)分
null
和undefined
,以及各種內(nèi)置對(duì)象(如Array
、Date
等)。 - 通用性:不依賴環(huán)境或原型鏈,可以用于跨環(huán)境的類型判斷。
返回值
以下是常見數(shù)據(jù)類型及其對(duì)應(yīng)的返回值:
數(shù)據(jù)類型 | 返回值 |
---|---|
Number | [object Number] |
String | [object String] |
Boolean | [object Boolean] |
Undefined | [object Undefined] |
Null | [object Null] |
Array | [object Array] |
Object | [object Object] |
Function | [object Function] |
Date | [object Date] |
RegExp | [object RegExp] |
Error | [object Error] |
Symbol | [object Symbol] |
Map | [object Map] |
Set | [object Set] |
WeakMap | [object WeakMap] |
WeakSet | [object WeakSet] |
BigInt | [object BigInt] |
自定義類實(shí)例 | [object Object] |
示例
// 基本類型 console.log(Object.prototype.toString.call(123)); // [object Number] console.log(Object.prototype.toString.call("hello")); // [object String] console.log(Object.prototype.toString.call(true)); // [object Boolean] console.log(Object.prototype.toString.call(undefined)); // [object Undefined] console.log(Object.prototype.toString.call(null)); // [object Null] // 對(duì)象類型 console.log(Object.prototype.toString.call([])); // [object Array] console.log(Object.prototype.toString.call({})); // [object Object] console.log(Object.prototype.toString.call(function() {})); // [object Function] console.log(Object.prototype.toString.call(new Date())); // [object Date] console.log(Object.prototype.toString.call(/abc/)); // [object RegExp] // 特殊對(duì)象 console.log(Object.prototype.toString.call(new Map())); // [object Map] console.log(Object.prototype.toString.call(new Set())); // [object Set] console.log(Object.prototype.toString.call(Symbol())); // [object Symbol] console.log(Object.prototype.toString.call(BigInt(123))); // [object BigInt]
適用場(chǎng)景
區(qū)分 null
和 object
:
console.log(typeof null); // "object" (誤導(dǎo)性結(jié)果) console.log(Object.prototype.toString.call(null)); // [object Null]
區(qū)分對(duì)象類型:
console.log(Object.prototype.toString.call([])); // [object Array] console.log(Object.prototype.toString.call({})); // [object Object]
跨環(huán)境檢測(cè):
在不同的 JavaScript 環(huán)境中(如瀏覽器和 Node.js),使用 instanceof
有時(shí)可能會(huì)失敗,而 Object.prototype.toString.call()
是可靠的。
封裝為通用函數(shù)
可以封裝為一個(gè)類型檢測(cè)工具:
function getType(value) { return Object.prototype.toString.call(value).slice(8, -1).toLowerCase(); } console.log(getType(123)); // "number" console.log(getType(null)); // "null" console.log(getType([])); // "array" console.log(getType(new Map())); // "map" console.log(getType(() => {})); // "function"
注意事項(xiàng)
自定義類實(shí)例(非內(nèi)置對(duì)象)都會(huì)返回 [object Object]
,如果需要區(qū)分,可以結(jié)合 constructor.name
:
class MyClass {} const instance = new MyClass(); console.log(Object.prototype.toString.call(instance)); // [object Object] console.log(instance.constructor.name); // MyClass
無法檢測(cè)用戶定義的 Symbol.toStringTag 修改:
const obj = { [Symbol.toStringTag]: "CustomTag" }; console.log(Object.prototype.toString.call(obj)); // [object CustomTag]
Object.prototype.toString.call()
是一種強(qiáng)大的數(shù)據(jù)類型判斷方法,特別適用于復(fù)雜類型判斷。
到此這篇關(guān)于JavaScript數(shù)據(jù)類型判斷之Object.prototype.toString.call() 的詳解的文章就介紹到這了,更多相關(guān)js Object.prototype.toString.call()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
js實(shí)現(xiàn)簡(jiǎn)單進(jìn)度條效果
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)簡(jiǎn)單進(jìn)度條效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_
這篇文章主要介紹了微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"},非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-10-10JS實(shí)現(xiàn)的緩沖運(yùn)動(dòng)效果示例
這篇文章主要介紹了JS實(shí)現(xiàn)的緩沖運(yùn)動(dòng)效果,涉及JavaScript數(shù)值運(yùn)算與時(shí)間函數(shù)相關(guān)使用技巧,需要的朋友可以參考下2018-04-04momentjs實(shí)現(xiàn)DatePicker時(shí)間禁用的項(xiàng)目實(shí)踐
momentjs是一個(gè)處理時(shí)間的js庫,簡(jiǎn)潔易用,本文來介紹一下momentjs實(shí)現(xiàn)DatePicker時(shí)間禁用,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09通過JavaScript實(shí)現(xiàn)動(dòng)態(tài)圣誕樹詳解
這篇文章主要為大家介紹幾個(gè)好看的基于HTML+CSS+JS的圣誕樹,希望圣誕節(jié)那天圣誕老爺爺能把我喜歡的你塞到我床上。感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2021-12-12向當(dāng)前style sheet中插入一個(gè)新的style實(shí)現(xiàn)方法
今天為了臨時(shí)解決頁面樣式問題,為了方便,直接在這個(gè)公共的js里面向style sheet插入新的style rule,感興趣的朋友可以出納卡下哈2013-04-04VScode中配置JavaScript編譯環(huán)境的方法
這篇文章主要介紹了VSCODE中配置JavaScript編譯環(huán)境的方法,方式一 使用Node.js做為解釋器運(yùn)行JS代碼 Node.js的安裝和配置,方式二使用VSCODE插件Code Runner運(yùn)行JS代碼,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08