Object.prototype.toString方法

//判断是否为函数
function isFunction(it) {
  return Object.prototype.toString.call(it) === '[object Function]';
}

//判断是否为数组
function isArray(it) {
  return Object.prototype.toString.call(it) === '[object Array]';
}

//判断各种类型的基函数
function isType(type) {
  return function(obj) {
    return Object.prototype.toString.call(obj) === "[object " + type + "]";
  }
}
//借助以下四个方法来判断: 比如 isObject({a:1, b:2})
var isObject = isType("Object");
var isString = isType("String");
var isArray = Array.isArray || isType("Array");
var isFunction = isType("Function");

 

ECMAScript 3:

在Object.prototype.toString方法被调用时,会执行以下的操作步骤:

  1. 获取this对象的[[Class]]属性的值;

  2.  计算出"[object ", 第1步的操作结果Result(1),以及 "]"连接后的新字符串.

  3.  返回第2步的操作结果Result(2).

 

ECMAScript 5:

在Object.prototype.toString方法被调用时,会执行以下的操作步骤:

  1. 如果this的值为undefined,返回"[object Undefined]".

  2. 如果this的值为null,返回"[object Null]".

  3. O成为调用ToObject(this)的结果.

  4. class成为O的内部属性[[Class]]的值.

  5. 返回"[object ",class, 以及 "]"连接后的新字符串.

 

兼容性:

  为了兼容ie6这类比较古老的游览器,Object.prototype.toString.call(obj) 通常用作"Boolean Number String Function Array Date RegExp Object"这8种数据类型的判断。

  null 和 undefined 建议不要用Object.prototype.toString.call(obj)来判断。

posted @ 2013-03-15 15:27  郎涛  阅读(420)  评论(0)    收藏  举报