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