成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS數(shù)據(jù)類型檢驗

wuyumin / 1942人閱讀

摘要:如果此方法在自定義對象中未被覆蓋,返回,其中是對象的類型那為什么會報錯呢這是為什么呢,因為為構(gòu)造函數(shù),構(gòu)造函數(shù)本身沒有方法。依照原型鏈關(guān)系,構(gòu)造函數(shù)的上游原型鏈?zhǔn)?。所以,你調(diào)用本質(zhì)上是調(diào)用,這里需要的參數(shù)類型是函數(shù),所以會報錯。

我們知道判斷數(shù)據(jù)類型可以用typeof

定義一些數(shù)據(jù)

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)可以判斷出類型,但是對應(yīng)對象,沒有辦法知道具體的類型

instanceof 判斷是否為每個類型的實例,通過這個方法可以判斷出類型,我們對上述數(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也不是保險的,因為constructor屬性是可以被修改的,會導(dǎo)致檢測出的結(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]"

...

每個對象都有一個toString()方法,當(dāng)該對象被表示為一個文本值時,或者一個對象以預(yù)期的字符串方式引用時自動調(diào)用。默認(rèn)情況下,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為構(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ù),所以會報錯。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/102996.html

相關(guān)文章

  • javascript 參數(shù)檢驗(一):實現(xiàn)一個方便的參數(shù)檢驗工具

    摘要:本文嘗試編寫一種參數(shù)檢查工具,期待能緩解類似問題。為了實現(xiàn)鏈?zhǔn)秸{(diào)用,返回的是一個特殊的包裝對象。如果要打印出檢查失敗的參數(shù)名,需要寫成。由于德摩根定律的存在,后的參數(shù)表實際上在表達(dá)與的關(guān)系,比如表示的是參數(shù)既不為也不為。 綜述 javascript 屬于弱類型語言,參數(shù)的類型錯誤只能在運行期發(fā)現(xiàn)。當(dāng)你需要 expose 非常健壯的接口給外部,或者在調(diào)試較大項目的時候,你可能會懷念強類型...

    maxmin 評論0 收藏0
  • 利用Object.prototype.toString.call()來進(jìn)行類型檢驗

    摘要:會將數(shù)組中的每個元素一個個傳入給。參考鏈接與的區(qū)別二進(jìn)行類型檢驗首先來看一個問題,用來檢驗類型有什么缺點呢答案是無法準(zhǔn)確地檢驗對象類型。比較好的方式就是用來進(jìn)行檢驗。判斷是否是對象類型注意使用是不能得到類型的。 一、apply與call的區(qū)別 相同點:可以讓一個對象調(diào)用另一個對象的方法不同點: apply最多只能傳入兩個參數(shù),第一個為對象,第二個為數(shù)組 call能傳入多個參數(shù),第一個...

    JackJiang 評論0 收藏0
  • 分享一個超詳細(xì)的數(shù)據(jù)分析案例【Python】附ABTest詳細(xì)介紹

    摘要:確定分流方案使用各類平臺分配流量。備擇假設(shè)與零假設(shè)相反,即實驗者希望證實的假設(shè)。雖然該數(shù)據(jù)集的統(tǒng)計結(jié)果與支付寶的實際規(guī)模有偏差,但不影響解決方案的適用性。選定統(tǒng)計方法由于樣本較大,故采用檢驗。 ...

    3fuyu 評論0 收藏0
  • JavaScript數(shù)據(jù)類型

    摘要:數(shù)字十進(jìn)制直接寫二進(jìn)制前綴八進(jìn)制前綴十六進(jìn)制前綴字符串你好轉(zhuǎn)義加,表示特定含義或者本來有特定含義的變?yōu)橐话阕址疽猓D(zhuǎn)義后換行符本意引用,轉(zhuǎn)義后輸出本意,轉(zhuǎn)義后制表符本意引用,轉(zhuǎn)義后輸出多行字符串布爾符號對象設(shè)定設(shè)置對象屬性名,左邊引號可省 數(shù)字 NUMBER 十進(jìn)制 直接寫 11.1 .11.1e^2 二進(jìn)制前綴 0b 八進(jìn)制前綴 0 十六進(jìn)制前綴 0x 字符串 str...

    Dogee 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<