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

溫馨提示×

溫馨提示×

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

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

typeof和instanceof間有哪些區別

發布時間:2022-03-11 11:38:03 來源:億速云 閱讀:105 作者:iii 欄目:web開發

今天小編給大家分享一下typeof和instanceof間有哪些區別的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

typeof和instanceof間有哪些區別

typeof

typeof是一個一元運算符,放在一個運算數前面,這個運算數可以是任何類型。它返回一個字符串,說明運算數的類型。請看栗子:

const type =  typeof '中國萬歲'; // string
typeof 666; // number
typeof true; // boolean
typeof undefined; // undefined
typeof Symbol(); // symbol
typeof 1n; // bigint
typeof () => {}; // function

typeof []; // object
typeof {}; // object
typeof new String('xxx'); // object

typeof null; // object

通過以上例子可以看出,typeof只能準確判斷基本數據類型和函數(函數其實是對象,并不屬于另一種數據類型,但也能夠使用 typeof 進行區分),無法精確判斷出引用數據類型(統統返回 object)。

有一點需要注意,調用typeof null返回的是object,這是因為特殊值null被認為是一個對空對象的引用(也叫空對象指針)。

如果想準確判斷引用數據類型,可以用instanceof運算符。

instanceof

instanceof運算符放在一個運算數的后面,給定對象的前面。它返回一個布爾值,說明運算數是否是給定對象的實例:

const result = [] instanceof Array; // true

const Person = function() {};
const p = new Person();
p instanceof Person; // true

const message = new String('xxx');
message instanceof String; // true

區別

  • typeof 會返回一個運算數的基本類型,instanceof 返回的是布爾值

  • instanceof 可以準確判斷引用數據類型,但是不能正確判斷基本數據類型

  • typeof 雖然可以判斷基本數據類型(null 除外),但是無法判斷引用數據類型(function 除外)

擴展

Object.prototype.toString.call()

typeofinstanceof都有一定的弊端,并不能滿足所有場景的需求。如果需要通用檢測數據類型,可以使用Object.prototype.toString.call()方法:

Object.prototype.toString.call({}); // "[object Object]"
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call(666); // "[object Number]"
Object.prototype.toString.call('xxx'); // "[object String]"

注意,該方法返回的是一個格式為"[object Object]"的字符串。

封裝函數

為了更方便的使用,我們可以將這個方法進行封裝:

function getType(value) {
    let type = typeof value;
    if (type !== 'object') { // 如果是基本數據類型,直接返回
        return type;
    }
    // 如果是引用數據類型,再進一步判斷,正則返回結果
    return Object.prototype.toString.call(value).replace(/^\[object (\S+)\]$/, '$1');
}

getType(123); // number
getType('xxx'); // string
getType(() => {}); // function
getType([]); // Array
getType({}); // Object
getType(null); // Null

以上就是“typeof和instanceof間有哪些區別”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

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

AI

榆树市| 东明县| 永年县| 策勒县| 安化县| 密云县| 开鲁县| 桂阳县| 阜康市| 渭南市| 唐河县| 濮阳县| 安陆市| 无极县| 晴隆县| 临海市| 通渭县| 平阴县| 曲水县| 缙云县| 河池市| 景谷| 建平县| 远安县| 克拉玛依市| 富阳市| 姚安县| 乐都县| 新绛县| 扶余县| 金沙县| 东安县| 垦利县| 连云港市| 乐清市| 泽州县| 泰州市| 沅江市| 宝兴县| 青田县| 台东市|