在任何值上調(diào)用Object原生的toString()方法,都會(huì)返回一個(gè)[object NativeConstructorName]格式的字符串。
由于原生數(shù)組的構(gòu)造函數(shù)名與全局作用域無關(guān),因此使用toString()就能保證返回一致的值
function isArray(value){
return Object.prototype.toString.call(value)=="[object Array]"
}同樣,也可以基于這一思路來測(cè)試某個(gè)值是不是原生函數(shù)或正則表達(dá)式:
function isFunction(value){
return Object.prototype.toString.call(value) == "[object Function]";
}
function isRegExp(value){
return Object.prototype.toString.call(value) == "[object RegExp]";
}這一技巧也廣泛應(yīng)用于檢測(cè)原生JSON 對(duì)象。Object 的toString()方法不能檢測(cè)非原生構(gòu)造函數(shù)的構(gòu)造函數(shù)名。因此,開發(fā)人員定義的任何構(gòu)造函數(shù)都將返回[object Object]。有些JavaScript 庫會(huì)包含與下面類似的代碼。
var isNativeJSON = window.JSON && Object.prototype.toString.call(JSON) ==
"[object JSON]";