摘要:數據類型七種內置類型空值未定義布爾值數字字符串對象符號除對象之外,其他統稱為基本類型類型檢測運算符后面跟操作數,或者,返回一個類型的字符串值。運算符用于測試構造函數的屬性是否出現在對象的原型鏈中的任何位置。
數據類型
JavaScript七種內置類型:
空值(null)
未定義(undefined)
布爾值(boolean)
數字(number)
字符串(string)
對象(object)
符號(symbol)
除對象之外,其他統稱為基本類型
類型檢測 typeoftypeof運算符后面跟操作數,typeof operand 或者 typeof (operand),返回一個類型的字符串值。
示例:typeof undefined === "undefined" // true typeof true === "boolean" // true typeof 1 === "number" // true typeof "test" === "string" // true typeof {} === "object" // true typeof Symbol() === "symbol" // true特殊示例:
typeof null === "object" typeof function () {} === "function" typeof [1] === "object"
typeof 對null的處理有問題,正確的結果應該是"null",但是實際返回的是"object",這個bug由來已久,也許以后也不會修復。
typeof function() {}返回的是一個"function",似乎function也是JavaScript的一個內置對象,實際上函數是一個可調用對象,它有一個內部屬性[[Call]],該屬性使其可以被調用。
typeof [1]返回"object",說明數組也是object類型,實際上它是object的一個子類型,和普通對象通過字符串鍵索引不同,數組通過數字按順進行索引。
typeof是檢測基本數據類型的最佳工具,但是檢測引用類型的值時作用不大,都會返回"object",這時候就需要instance操作符了。instance運算符用于測試構造函數的protytpe屬性是否出現在對象的原型鏈中的任何位置。
用法:object instanceof constructor,object: 要檢測的對象,constructor某個構造函數
function A() {} function B() {} function C() {} A.prototype = new C() const a = new A() console.log(a instanceof A) // a是A類的實例 true console.log(a instanceof C) // A繼承C true console.log(a instanceof B) // a不是A類的實例 false console.log(a instanceof Object) // Object實所有引用類型的父類 true console.log(A.prototype instanceof Object) // true A.prototype = {} a1 = new A() console.log(a1 instanceof A) // true console.log(a instanceof A) // false const date = new Date() console.log(date instanceof Date) // true原理
function instance_of(L, R) {//L 表示左表達式,R 表示右表達式 var O = R.prototype;// 取 R 的顯示原型 L = L.__proto__;// 取 L 的隱式原型 while (true) { if (L === null) return false; if (O === L)// 這里重點:當 O 嚴格等于 L 時,返回 true return true; L = L.__proto__; } }
想要對instanceof運算符有更加深入的了解車票
toStringtoString()方法返回一個表示該對象的字符串,每個對象都有一個toString()方法,當該對象被表示為一個文本值時,或者一個對象以預期的字符串方式引用時自動調用。默認情況下,toString()方法被每個Object對象繼承。如果此方法在自定義對象中未被覆蓋,toString()返回"[object type]",其中type是對象的類型
const toString = Object.prototype.toString console.log(toString.call(null)) // [object Null] console.log(toString.call(undefined)) // [object Undefined] console.log(toString.call(new String)) // [object String] console.log(toString.call(Function)) // [object Function] console.log(toString.call(new Date)) // [object Date] console.log(toString.call("new Date")) // [object String] console.log(toString.call(["a"])) // [object Array]
從示例可以看出,Object.prototype.toString.call()可以準確表示數值的類型
總結typeof運算符適合檢測基本數據類型,且返回類型的字符串
instanceof運算符適合檢測引用類型值
toString()返回對象的類型,可以準確判斷數值的類型
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104902.html
摘要:重新認識類型數據類型重學前端系列筆記前言最新在看大神的專欄重學前端,感慨頗多,收益也頗多。實際上是能夠表示的最小精度。也可以是對象類型這個類型是新增的一個類型。主要用于解釋字符集等。 title: 1. 重新認識 JavaScript 類型date: 2019-03-27 11:12:47 +0800tags: [JavaScript數據類型]categories: 重學前端系列筆記...
摘要:首先一上來就分享了兩個學習方法建立知識架構追本溯源。列一份前端知識架構圖在這章節中,分享了本專欄要學習的知識架構瀏覽器的實現原理和前端工程實踐四個模塊。最后一個是前端工程實踐,從性能工具鏈持續集成搭建系統架構與基礎庫五個方面講起。 明確你的前端學習路線 自己特別喜歡屯課,看著自己買的課,有種滿足感,仿佛知識都是我的了,翻看極客時間買的課,決定這段時間把重學前端專欄學習一遍。 從周六到今...
摘要:隱式強制類型轉換指的是那些隱藏的強制類型轉換,副作用也不是很明顯,事實上,只要自己覺得不夠明顯的強制類型轉換都可以算作隱式強制類型轉換,接下來,此文將會介紹幾種常見的隱式類型轉換。 隱式強制類型轉換指的是那些隱藏的強制類型轉換,副作用也不是很明顯,事實上,只要自己覺得不夠明顯的強制類型轉換都可以算作隱式強制類型轉換,接下來,此文將會介紹幾種常見的隱式類型轉換。 加法操作符 轉換規則: ...
摘要:的碼點被稱為基本字符區域。關于的介紹,我準備用文檔阮一峰來做一些介紹,具體的可以參考文檔引入的原因的對象屬性名都是字符串,這容易造成屬性名的沖突。其他的一些屬性可以去看文檔阮一峰注意函數前不能使用命令,否則會報錯。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完...
摘要:的碼點被稱為基本字符區域。關于的介紹,我準備用文檔阮一峰來做一些介紹,具體的可以參考文檔引入的原因的對象屬性名都是字符串,這容易造成屬性名的沖突。其他的一些屬性可以去看文檔阮一峰注意函數前不能使用命令,否則會報錯。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完...
閱讀 2772·2021-11-19 11:30
閱讀 3058·2021-11-15 11:39
閱讀 1782·2021-08-03 14:03
閱讀 1985·2019-08-30 14:18
閱讀 2043·2019-08-30 11:16
閱讀 2149·2019-08-29 17:23
閱讀 2597·2019-08-28 18:06
閱讀 2533·2019-08-26 12:22