中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript中怎么檢測數據類型

發布時間:2023-04-15 14:33:17 來源:億速云 閱讀:297 作者:iii 欄目:開發技術

本篇內容介紹了“JavaScript中怎么檢測數據類型”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

檢測數據類型1:typeof

其返回結果都是字符串,字符串中包含了對應的數據類型 number/string/boolean/undefined/symbol/object/function

局限性:檢測null返回的是object,檢測其他如數組、正則等特殊對象時,返回的結果都是object,無法區分具體類型。

console.log(typeof 12); //=>"number"
console.log(typeof null); //=>"object"
console.log(typeof []); //=>"object"
console.log(typeof /^$/); //=>"object"

檢測數據類型2:instanceof

用于檢測某個實例是否屬于這個類,其檢測的底層機制是所有出現在其原型鏈上的類,檢測結果都是true

局限性:由于可以基于__proto__或者prototype改動原型鏈的動向,所以基于instanceof檢測出來的結果并不一定是準確的。而基本數據類型的值,連對象都不是,更沒有__proto__,雖說也是所屬類的實例,在JS中也可以調取所屬類原型上的方法,但是instanceof是不認的。

console.log(12 instanceof Number); //false
console.log(new Number(12) instanceof Number); //true
console.log([] instanceof Array); //true
console.log([] instanceof Object); //true

function Fn() {}
Fn.prototype.__proto__ = Array.prototype;
let f = new Fn();
console.log(f instanceof Array); //true

檢測數據類型3:constructor

這是實例所屬類原型上的屬性,指向的是類本身,但其也是可以進行修改,與instanceof類似。

let arr = [];
console.log(arr.constructor); //? Array() { [native code] }
console.log(arr.constructor === Array); //true

let n=12;
console.log(n.constructor === Number); //true

檢測數據類型4:Object.prototype.toString.call([value]) / ({}).toString.call([value])  

該方法不是用來轉換為字符串的,而是返回當前實例所屬類的信息,其返回結果的格式為[object 所屬類信息],即[object Object/Array/RegExp/Date/Function/Null/Undefined/Number/String/Boolean/Symbol...]

這種方式基本上沒有什么局限性,是檢測數據類型相對來說最準確的方式。

console.log(Object.prototype.toString.call(12)); //[object Number]
console.log(Object.prototype.toString.call([])); //[object Array]
console.log(Object.prototype.toString.call({})); //[object Object]

function fn () {}
console.log(({}).toString.call(fn)); //[object Function]
console.log(({}).toString.call(/^$/)); //[object RegExp]
console.log(({}).toString.call(new Date)); //[object Date]

雖然檢測數據類型4相對來說最好,但格式稍微繁瑣一些,是不是可以想辦法封裝一個方法,輸出結果類似于typeof那種,直接輸出如number、date、regexp這種,確實是有的。

var class2type = {};
var toString = class2type.toString; //=>Object.prototype.toString
var hasOwn = class2type.hasOwnProperty; //=>Object.prototype.hasOwnProperty
var fnToString = hasOwn.toString; //=>Function.prototype.toString
var ObjectFunctionString = fnToString.call(Object); //=>Object.toString() =>"function Object() { [native code] }"

"Boolean Number String Function Array Date RegExp Object Error Symbol".split(" ").forEach(function anonymous(item) {
    class2type["[object " + item + "]"] = item.toLowerCase();
});
console.log(class2type);
/* [object Boolean]: "boolean"
[object Number]: "number"
[object String]: "string"
[object Function]: "function"
[object Array]: "array"
[object Date]: "date"
[object RegExp]: "regexp"
[object Object]: "object"
[object Error]: "error"
[object Symbol]: "symbol"
*/

function toType(obj) {
    //=>obj may be null / undefined
    //=>return "null"/"undefined"
    if (obj == null) {
        return obj + "";
    }

    return typeof obj === "object" || typeof obj === "function" ? class2type[toString.call(obj)] || "object" : typeof obj;
}

這是jQuery中用來檢測數據的方法,可以達到我們說的需求。

“JavaScript中怎么檢測數據類型”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乐安县| 临海市| 金坛市| 唐河县| 万全县| 大洼县| 永泰县| 淄博市| 洪泽县| 大城县| 玉田县| 咸阳市| 沁阳市| 封丘县| 沈阳市| 大同县| 宁南县| 衢州市| 壤塘县| 连江县| 黄梅县| 崇信县| 磴口县| 太和县| 什邡市| 合作市| 时尚| 崇义县| 湘潭市| 石屏县| 三河市| 白山市| 永康市| 富裕县| 于都县| 诸暨市| 济阳县| 德惠市| 琼中| 得荣县| 晋江市|