国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用js編寫(xiě)一個(gè)函數(shù)判斷所有數(shù)據(jù)類(lèi)型的通用方法

這篇具有很好參考價(jià)值的文章主要介紹了使用js編寫(xiě)一個(gè)函數(shù)判斷所有數(shù)據(jù)類(lèi)型的通用方法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、判斷數(shù)據(jù)類(lèi)型的方法

1、typeof

在 JavaScript 里使用 typeof 來(lái)判斷數(shù)據(jù)類(lèi)型,只能區(qū)分基本類(lèi)型,即 “number”,”string”,”undefined”,”boolean”,”object” 五種。
對(duì)于數(shù)組、對(duì)象來(lái)說(shuō),其關(guān)系錯(cuò)綜復(fù)雜,使用 typeof 都會(huì)統(tǒng)一返回 “object” 字符串。

typeof {} //object

typeof [] //object

要想?yún)^(qū)別對(duì)象、數(shù)組單純使用 typeof 是不行的。或者你會(huì)想到 instanceof 方法。

2、instanceof

instanceof是javaScript中的一種運(yùn)算符,用于判斷某個(gè)對(duì)象是否屬于某個(gè)類(lèi)(或其父類(lèi))的實(shí)例,

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

console.log([] instanceof Object) //true

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

上面代碼發(fā)現(xiàn)都是 Object 的實(shí)例

所以要判斷復(fù)合數(shù)據(jù)類(lèi)型,要如下判斷:

//對(duì)象
({} instanceof Object) && !({} instanceof Function) && !({} instanceof Function)

//數(shù)組
([] instanceof Object) && ([] instanceof Array)

//函數(shù)
(function () {} instanceof Object) && (function () {} instanceof Function)

雖然 instanceof 運(yùn)算符在某些情況下可以很方便地判斷對(duì)象所屬的類(lèi),但是在實(shí)際開(kāi)發(fā)中需要注意其局限性,并結(jié)合其他方法和技巧來(lái)進(jìn)行類(lèi)型判斷。

3、Object.prototype.toString.call()

更簡(jiǎn)便的方式,即是使用 Object.prototype.toString.call() 來(lái)確定類(lèi)型。

由于 JavaScript 中一切都是對(duì)象,任何都不例外,對(duì)所有值類(lèi)型應(yīng)用 Object.prototype.toString.call() 方法

對(duì)于 Object.prototype.toString() 方法,會(huì)返回一個(gè)形如 “[object XXX]” 的字符串。

如果對(duì)象的 toString() 方法未被重寫(xiě),就會(huì)返回如上面形式的字符串。

toString()為Object的原型方法,而Array,function等類(lèi)型作為Object的實(shí)例,都重寫(xiě)了toString方法。不同的對(duì)象類(lèi)型調(diào)用toString方法時(shí),根據(jù)原型鏈的知識(shí),調(diào)用的是對(duì)應(yīng)的重寫(xiě)之后的toString方法。

Call是一個(gè)允許您更改另一個(gè)函數(shù)上下文的函數(shù)。

對(duì)于 Object.prototype.toString.call(arg),若參數(shù)為 null 或 undefined,直接返回結(jié)果。

若參數(shù)不為 null 或 undefined,則將參數(shù)轉(zhuǎn)為對(duì)象,再作判斷。

4、編寫(xiě)一個(gè)函數(shù)判斷所有數(shù)據(jù)類(lèi)型
//編寫(xiě)一個(gè)函數(shù)判斷所有數(shù)據(jù)類(lèi)型
function _typeof(item) {
    let res = Object.prototype.toString.call(item);
    res = res.split(" ")[1];
    res = res.substr(0, res.length - 1);
    return res;
}

效果如下:

console.log(_typeof(123));//Number

console.log(_typeof("abc"));//String

console.log(_typeof(true));//Boolean

console.log(_typeof(null));//Null

console.log(_typeof(undefined));//Undefined

var fun = function () {}
console.log(_typeof(fun));//Function

var arr = [1, 2, 3]
console.log(_typeof(arr));//Array

var obj = {
    name: 'jack',
    age: 20
}
console.log(_typeof(obj));//Object

二、寫(xiě)一個(gè)判斷兩個(gè)數(shù)組是否相等的方法

1、將兩個(gè)數(shù)組轉(zhuǎn)成字符串比較, 但是發(fā)現(xiàn)他們只是順序不相等也被當(dāng)做不相等
[1, 2, 3].toString() == [3, 2, 1].toString();
//  -- --false
2、我們可以先把數(shù)組排序按照從小到大的順序sort() 函數(shù)
[1, 2, 3].sort().toString() == [3, 2, 1].sort().toString();
//  -- --true

這樣的就是 “1,2,3” == "1,2,3"結(jié)果是相等的文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-835200.html

3、如果數(shù)組里的元素是標(biāo)量, 非object類(lèi)型, 可以使用 == 比較數(shù)組里的元素:
scalarArrayEquals(array1, array2) {
    return array1.length == array2.length && array1.every(function (v, i) {
        return v === array2[i]
    });
}

到了這里,關(guān)于使用js編寫(xiě)一個(gè)函數(shù)判斷所有數(shù)據(jù)類(lèi)型的通用方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包