摘要:所以,當我們使用時,不能進行復雜數據類型的判斷,因為它調用的是,雖然也繼承自,但在上重寫了,而我們通過實際上是通過原型鏈調用了。
關于 toString 方法在有關js的開發中使用應該是相當廣泛的,這兩天在看jQuery的源碼,從 toString 本身了解與鞏固了不少知識,寫出來與大家一同分享。
首先先上一段代碼:
var arr=[1,2,3]; toString.call(arr);
來看一下效果:
眾所周知,判斷數據類型,我們大多會使用typeof操作符,但是typeof操作符只能判斷基本數據類型,對于復雜的數據類型一律返回object,而使用toString方法在這里可以做一個很好的補充。
問:為什么要使用toString.call(arr),而不能直接使用arr.toString() ?
再上一段代碼:
var arr=[1,2,3]; toString.call(arr); arr.toString();
來看一下效果:
很明顯直接使用toString,得不到我們想要的效果,博主第一次看到這個結果時也是一臉懵逼。
其實,這里面就涉及到js原型及原型鏈的相關知識
再上一段代碼:
var arr=[1,2,3]; Object.prototype.toString.call(arr); Array.prototype.toString.call(arr);
來看一下效果:
看到這里大家都應該明白了,其實只有Object.prototype上的toString才能用來進行復雜數據類型的判斷。
簡單解釋一些原型鏈的概念:
我們都知道js中的對象都繼承自Object,所以當我們在某個對象上調用一個方法時,會先在該對象上進行查找,如果沒找到則會進入對象的原型(也就是.prototype)進行查找,如果沒找到,同樣的也會進入對象原型的原型進行查找,直到找到或者進入原型鏈的頂端Object.prototype才會停止。
所以,當我們使用arr.toString()時,不能進行復雜數據類型的判斷,因為它調用的是Array.prototype.toString,雖然Array也繼承自Object,但js在Array.prototype上重寫了toString,而我們通過toString.call(arr)實際上是通過原型鏈調用了Object.prototype.toString。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80266.html
摘要:復雜類型復雜類型從字面量是直接生成構造函數的,所以不會像基本類型一樣兩種情況。 JS(ES6)中的基本數據類型:1.數值型(Number):包括整數、浮點數、2.布爾型(Boolean)、3.字符串型(String)、4.數組(Array)、5.空值(Null) 、6.未定義(Undefined),基本數據類型是按值訪問的,因為可以直接操作保存在變量中的實際值。引用類型:Object ...
摘要:原型鏈和對象的原型是對象實例和它的構造函數之間建立的鏈接,它的值是構造函數的。對象的原型根據上文提到的構造調用函數的時候會創建一個新對象,自動將的原型指向構造函數的對象。 showImg(https://segmentfault.com/img/remote/1460000020185197); JS的原型、原型鏈一直是比較難理解的內容,不少初學者甚至有一定經驗的老鳥都不一定能完全說清...
摘要:棧區由編譯器自動分配釋放,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧。屬性返回對創建此對象的構造函數的引用。所有的和都是宿主對象參考高級程序設計堆和棧的概念和區別全面解析中的數據類型與類型轉換 數據類型 數據類型劃分 javascript中定義了6中基本數據類型(原始值類型),和一種復雜數據類型(引用類型),所謂復雜類型,其本質是由無序的名值對(key:val...
摘要:示例構造函數繼承實例對象其次,我們還可以使用中的新語法等關鍵字來實現繼承。對象的屬性是該對象的構造函數的屬性。基于上邊構造函數繼承代碼作用域與命名空間如果了解的用法,那么就應該只要有塊級作用域和函數作用域。 JavaScript數據類型 JavaScript中有哪些基本數據類型 undefined、null、number、string、boolean、symbol(es6中新增)為啥沒...
閱讀 1074·2021-11-16 11:45
閱讀 2708·2021-09-27 13:59
閱讀 1315·2021-08-31 09:38
閱讀 3143·2019-08-30 15:52
閱讀 1315·2019-08-29 13:46
閱讀 2085·2019-08-29 11:23
閱讀 1631·2019-08-26 13:47
閱讀 2476·2019-08-26 11:54