instanceof & isArray & tostring.call() 判斷數組的區別

以前看源碼的時候,看見一個判斷值是否時數組類型的方法時,心中有了疑問。數組

因爲以前一直都用Array.isArray(val)和instanceof的方式判斷數組類型,可是源碼上判斷數組是這樣的:瀏覽器

toString.call(val) === "[object Array]"
複製代碼

不清楚做者爲何選擇用這個方式判斷數組類型的前提下,我去查了資料。bash

我找出了instanceof , isArray和源碼中提到的方式。es5

val instanceof Array // 不支持iframede的窗口對象的數組建立的數組
Array.isArray(val) // 支持上述
複製代碼

那麼,源碼中提到的判斷數組類型和Array.isArray(val);有什麼區別呢?spa

緣由在於 Array.isArray是es5的方法,不支持ie8如下的瀏覽器
複製代碼

不囉嗦:code

對於項目中採用哪一種方式,徹底跟你的業務需求息息相關。對象

若是你的項目不須要兼容低版本瀏覽器。那麼, Array.isArray(val)就夠了。iframe

若是你的項目連iframe的數組判斷均可以忽略,那麼instanceof就行了。源碼

若是你的項目,須要足夠高的要求,而且兼容低版本瀏覽器,你應該採用toString的類型判斷。string

感謝,有收穫的請點個贊。>_<

相關文章
相關標籤/搜索