狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

別再被坑了! javascript類型檢測(cè)的最佳實(shí)踐

freeflydom
2024年8月17日 19:55 本文熱度 524

在 JavaScript 中,我們經(jīng)常需要判斷一個(gè)變量的類型。這個(gè)需求在編程中非常常見,因?yàn)椴煌愋偷臄?shù)據(jù)會(huì)影響到我們的代碼邏輯。

JavaScript 提供了幾種方法來檢測(cè)數(shù)據(jù)類型,每種方法都有自己的優(yōu)缺點(diǎn)。

Object.prototype.toString.call()

這是最萬能的方法。它可以準(zhǔn)確識(shí)別所有的 JavaScript 內(nèi)置類型,包括基本類型和復(fù)雜類型。不管你給它傳什么數(shù)據(jù),它都能給出一個(gè)統(tǒng)一格式的字符串,告訴你這個(gè)數(shù)據(jù)到底是什么類型。

它的原理是調(diào)用對(duì)象內(nèi)部的 [[Class]] 屬性。這個(gè)屬性是只讀的,不能被改寫,所以非常可靠。

優(yōu)點(diǎn):

  • 識(shí)別范圍廣,基本類型和復(fù)雜類型都能識(shí)別

  • 不會(huì)受到對(duì)象自身的 toString() 方法的影響

  • 返回結(jié)果格式統(tǒng)一,方便解析

缺點(diǎn):

  • 寫起來比較啰嗦

  • 如果是自定義類型,只能得到 [object Object],不能進(jìn)一步區(qū)分類型

function detectType(data) {

    return Object.prototype.toString.call(data).slice(8, -1).toLowerCase();

}


console.log(detectType(123)); // 'number'

console.log(detectType('abc')); // 'string'

console.log(detectType(true)); // 'boolean'

console.log(detectType(null)); // 'null'

console.log(detectType(undefined)); // 'undefined'

console.log(detectType([])); // 'array'

console.log(detectType({})); // 'object'

console.log(detectType(function () {})); // 'function'

console.log(detectType(new Date())); // 'date'

console.log(detectType(new RegExp())); // 'regexp'

console.log(detectType(new Error())); // 'error'


typeof

這個(gè)運(yùn)算符最常用,寫起來簡(jiǎn)單。它可以識(shí)別基本類型和函數(shù),但對(duì)復(fù)雜類型的識(shí)別能力有限。

優(yōu)點(diǎn):

  • 使用簡(jiǎn)單

  • 可以識(shí)別基本類型和函數(shù)

缺點(diǎn):

  • 無法區(qū)分?jǐn)?shù)組和普通對(duì)象

  • typeof null 的結(jié)果是 'object'

  • 無法識(shí)別內(nèi)置對(duì)象類型,如 DateRegExp 等

console.log(typeof 123); // 'number'

console.log(typeof 'abc'); // 'string'

console.log(typeof true); // 'boolean'

console.log(typeof undefined); // 'undefined'

console.log(typeof null); // 'object' (這是一個(gè)歷史遺留的 bug)

console.log(typeof []); // 'object'

console.log(typeof {}); // 'object'

console.log(typeof function () {}); // 'function'


instanceof

instanceof 運(yùn)算符用于測(cè)試構(gòu)造函數(shù)的 prototype 屬性是否出現(xiàn)在對(duì)象的原型鏈中的任何位置。

優(yōu)點(diǎn):

  • 可以檢查對(duì)象是否屬于特定的類或構(gòu)造函數(shù)

缺點(diǎn):

  • 只能檢查對(duì)象類型,不能檢查基本類型

  • 要識(shí)別多種類型,需要多次調(diào)用

console.log([] instanceof Array); // true

console.log({} instanceof Object); // true

console.log(function () {} instanceof Function); // true

console.log(new Date() instanceof Date); // true

console.log(new RegExp() instanceof RegExp); // true

console.log(new Error() instanceof Error); // true


console.log(123 instanceof Number); // false

console.log('abc' instanceof String); // false

console.log(true instanceof Boolean); // false


constructor

constructor 是對(duì)象的一個(gè)屬性,指向創(chuàng)建該對(duì)象的構(gòu)造函數(shù)。可以用它來判斷對(duì)象的類型。

優(yōu)點(diǎn):

  • 可以識(shí)別大多數(shù)對(duì)象類型,包括自定義類型

缺點(diǎn):

  • 如果對(duì)象的 constructor 屬性被修改,會(huì)得到錯(cuò)誤結(jié)果

  • null 和 undefined 沒有 constructor 屬性

console.log((123).constructor === Number); // true

console.log('abc'.constructor === String); // true

console.log(true.constructor === Boolean); // true

console.log([].constructor === Array); // true

console.log({}.constructor === Object); // true

console.log(function () {}.constructor === Function); // true

console.log(new Date().constructor === Date); // true

console.log(new RegExp().constructor === RegExp); // true

console.log(new Error().constructor === Error); // true


總結(jié)

如果需要全面準(zhǔn)確的類型識(shí)別,Object.prototype.toString.call() 是最佳選擇。
如果只需要簡(jiǎn)單區(qū)分基本類型,typeof 就足夠了。
如果要檢查對(duì)象是否屬于特定類型,可以用 instanceof

轉(zhuǎn)自https://www.cnblogs.com/leadingcode/p/18362986


該文章在 2024/8/19 8:53:41 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2024 ClickSun All Rights Reserved