Object.prototype.toString.call([1,2,3]); // "[object Array]"
Object.prototype.toString.call(new Date); // "[object Date]"
Object.prototype.toString.call(/a-z/); // "[object RegExp]"
На основе этого можно создать функцию, которая будет получать точный тип любого объекта.
function getTypeOf(obj) {
return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
}
Проверка
getTypeOf({a: 4}); //"object"
getTypeOf([1, 2, 3]); //"array"
(function() {
console.log(getTypeOf(arguments)); //arguments
})();
getTypeOf(new ReferenceError); //"error"
getTypeOf(new Date); //"date"
getTypeOf(/a-z/); //"regexp"
getTypeOf(Math); //"math"
getTypeOf(JSON); //"json"
getTypeOf(new Number(4)); //"number"
getTypeOf(new String("abc")); //"string"
getTypeOf(new Boolean(true)); //"boolean"
Object.toType = (function toType(global) {
return function(obj) {
if (obj === global) {
return "global";
}
return ({}).toString.call(obj).match(/\s([a-z|A-Z]+)/)[1].toLowerCase();
}
})(this)
Object.toType(window); //"global" (all browsers)
Object.toType([1,2,3]); //"array" (all browsers)
Object.toType(/a-z/); //"regexp" (all browsers)
Object.toType(JSON); //"json" (all browsers)
Комментариев нет:
Отправить комментарий