1. 查看浏览器的对于API的支持
如 Proxy, Promise, Map, Symbol, Reflect等原生方法,在浏览器中的支持情况都可以用这个函数检测
// 判断浏览器是否支持某一方法
function isNative(Ctor) {
return typeof Ctor === 'function' && /native code/.test(Ctor.toString());
}
console.log(isNative(Proxy)) // true
console.log(isNative(Promise)) // true
console.log(isNative(Map)) // true
console.log(Proxy.toString()) // function Proxy() { [native code] }
console.log(Promise.toString()) // function Promise() { [native code] }
console.log(Map.toString()) // function Map() { [native code] }
关于[native code],这种[native code]是不是JS引擎内部实现的,比如chrome的V8引擎,其内部的回调机制是内部C++代码,而不是真实的JS代码
2.获取内置对象的子类型
function getObjType(par) {
return Object.prototype.toString.apply(par);
}
console.log(getObjType([])); //[object Array]
console.log(getObjType(new Date())); //[object Date]
console.log(getObjType(Math)); //[object Math]
console.log(getObjType(new Number(2))); //[object Number]
console.log(getObjType('abc')); //[object String]
console.log(getObjType(null)); //[object Null]
console.log(getObjType(undefined)); //[object Undefined]