以前看源碼的時候,看見一個判斷值是否時數組類型的方法時,心中有了疑問。數組
因爲以前一直都用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
感謝,有收穫的請點個贊。>_<