91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

浦北县| 邮箱| 兰西县| 蓬溪县| 东丽区| 平利县| 洪泽县| 鹿泉市| 沙河市| 澄迈县| 枣庄市| 松溪县| 彭泽县| 富民县| 广昌县| 仁布县| 张家港市| 汽车| 孟津县| 渝中区| 越西县| 张掖市| 文化| 房产| 乌兰县| 尤溪县| 大田县| 渭源县| 宁武县| 保靖县| 兴安盟| 嘉禾县| 南漳县| 淮阳县| 枝江市| 三河市| 剑川县| 汽车| 平利县| 新乡市| 阿图什市|