欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript數(shù)據(jù)類型判斷之Object.prototype.toString.call() 的詳解(示例)

 更新時(shí)間:2024年11月25日 12:00:45   作者:guokanglun  
`Object.prototype.toString.call()`是JavaScript中判斷數(shù)據(jù)類型的強(qiáng)大方法,可以精確區(qū)分所有內(nèi)置類型,包括原始類型和對(duì)象類型,適用于跨環(huán)境檢測(cè)和區(qū)分自定義類實(shí)例,感興趣的朋友跟隨小編一起看看吧

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ū)分 nullundefined,以及各種內(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ū)分 nullobject

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)文章

最新評(píng)論