您好,登錄后才能下訂單哦!
今天小編給大家分享一下typeof和instanceof間有哪些區別的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
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
運算符放在一個運算數的后面,給定對象的前面。它返回一個布爾值,說明運算數是否是給定對象的實例:
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 除外)
typeof
和instanceof
都有一定的弊端,并不能滿足所有場景的需求。如果需要通用檢測數據類型,可以使用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間有哪些區別”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。