среда, 19 июня 2013 г.

Полезное использование Object.prototype.toString.call()

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)

Комментариев нет:

Отправить комментарий