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