摘要:如果此方法在自定義對象中未被覆蓋,返回,其中是對象的類型那為什么會報錯呢這是為什么呢,因為為構造函數,構造函數本身沒有方法。依照原型鏈關系,構造函數的上游原型鏈是。所以,你調用本質上是調用,這里需要的參數類型是函數,所以會報錯。
我們知道判斷數據類型可以用typeof
定義一些數據
let num=1,str="str",bool=true,obj={},arr=[],sy=Symbol("s"),g,reg=/test/,date=new Date()
typeof運算符
typeof num //"number" typeof str //"string" typeof bool //"boolean" typeof g //"undefined" typeof obj //"object" typeof arr //"object" typeof reg//"object" typeof date //"object" typeof null //"object"
可以看出來typeof 對基本類型(除了null)可以判斷出類型,但是對應對象,沒有辦法知道具體的類型
instanceof 判斷是否為每個類型的實例,通過這個方法可以判斷出類型,我們對上述數據進行判斷
function Person(){} let p=new Person() function Foo(){} let f=new Foo()
num instanceof Number //false str instanceof String //false arr instanceof Object //true arr instanceof Array //true obj instanceof Object //true obj instanceof Array //false reg instanceof RegExp //true date instanceof Date //true
constructor
arr.constructor ===Array //true obj.constructor ===Object //true str.constructor === String //true
從輸出的結果我們可以看出,除了undefined和null,其他類型的變量均能使用constructor判斷出類型。
不過使用constructor也不是保險的,因為constructor屬性是可以被修改的,會導致檢測出的結果不正確
Object.prototype.toString.call
Object.prototype.toString.call(str) //"[object String]" Object.prototype.toString.call(obj) //"[object Object]" Object.prototype.toString.call(null) //"[object Null]" Object.prototype.toString.call(num) ///"[object Number]" ...
每個對象都有一個toString()方法,當該對象被表示為一個文本值時,或者一個對象以預期的字符串方式引用時自動調用。默認情況下,toString()方法被每個Object對象繼承。如果此方法在自定義對象中未被覆蓋,toString() 返回 "[object type]",其中type是對象的類型
那為什么Object.toString.call(params) 會報錯呢?
Object.toString.call(num) Uncaught TypeError: Function.prototype.toString requires that "this" be a Function at Number.toString () at :1:17
這是為什么呢,因為Object為構造函數,Object構造函數本身沒有toString方法。
依照原型鏈關系,Object構造函數的上游原型鏈是Function.prototype。
所以,你調用Object.toString.call(param)本質上是調用Function.prototype.toString.call(param),這里需要的參數類型是函數,所以會報錯。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/102996.html
摘要:本文嘗試編寫一種參數檢查工具,期待能緩解類似問題。為了實現鏈式調用,返回的是一個特殊的包裝對象。如果要打印出檢查失敗的參數名,需要寫成。由于德摩根定律的存在,后的參數表實際上在表達與的關系,比如表示的是參數既不為也不為。 綜述 javascript 屬于弱類型語言,參數的類型錯誤只能在運行期發現。當你需要 expose 非常健壯的接口給外部,或者在調試較大項目的時候,你可能會懷念強類型...
摘要:會將數組中的每個元素一個個傳入給。參考鏈接與的區別二進行類型檢驗首先來看一個問題,用來檢驗類型有什么缺點呢答案是無法準確地檢驗對象類型。比較好的方式就是用來進行檢驗。判斷是否是對象類型注意使用是不能得到類型的。 一、apply與call的區別 相同點:可以讓一個對象調用另一個對象的方法不同點: apply最多只能傳入兩個參數,第一個為對象,第二個為數組 call能傳入多個參數,第一個...
摘要:確定分流方案使用各類平臺分配流量。備擇假設與零假設相反,即實驗者希望證實的假設。雖然該數據集的統計結果與支付寶的實際規模有偏差,但不影響解決方案的適用性。選定統計方法由于樣本較大,故采用檢驗。 ...
摘要:數字十進制直接寫二進制前綴八進制前綴十六進制前綴字符串你好轉義加,表示特定含義或者本來有特定含義的變為一般字符本意,轉義后換行符本意引用,轉義后輸出本意,轉義后制表符本意引用,轉義后輸出多行字符串布爾符號對象設定設置對象屬性名,左邊引號可省 數字 NUMBER 十進制 直接寫 11.1 .11.1e^2 二進制前綴 0b 八進制前綴 0 十六進制前綴 0x 字符串 str...
閱讀 1634·2021-09-22 15:25
閱讀 1512·2021-09-07 10:06
閱讀 3190·2019-08-30 15:53
閱讀 1095·2019-08-29 13:12
閱讀 3385·2019-08-29 13:07
閱讀 734·2019-08-28 18:19
閱讀 2277·2019-08-27 10:57
閱讀 989·2019-08-26 13:29