判断对象类型

参考学习:http://www.cnblogs.com/ziyunfei/archive/2012/11/05/2754156.html
在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” ,“function”六种。

对于数组,对象,null来说,其关系错综复杂,使用 typeof 都会统一返回 “object” 字符串。

要想区别对象、数组、函数单纯使用 typeof 是不行的,JavaScript中,通过Object.prototype.toString方法,判断某个对象值属于哪种内置类型。

例子:

var arr = [];
console.log(Object.prototype.toString.call(arr))

结果:

“[object Array]”

在ES3中,Object.prototype.toString方法的规范如下:

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

  1. 如果this的值为undefined,则返回"[object Undefined]".
    2.如果this的值为null,则返回"[object Null]".
    3.让O成为调用ToObject(this)的结果.
  2. 获取this对象的[[Class]]属性的值。
  3. 计算出三个字符串"[object ", 第一步的操作结果Result(1), 以及 "]"连接后的新字符串。
  4. 返回第二步的操作结果Result(2)。

[[Class]]是一个内部属性,所有的对象(原生对象和宿主对象)都拥有该属性.在规范中,[[Class]]是这么定义的:
内部属性 描述
[[Class]] 一个字符串值,表明了该对象的类型。
其过程简单说来就是:1、获取对象的类名(对象类型)。2、然后将[object、获取的类名、]组合并返回。

var arr=[1,2];

//直接对一个数组调用toString()
arr.toString();// "1,2"
判断是否为数组对象
//通过call指定arr数组为Object.prototype对象中的toString方法的上下文
Object.prototype.toString.call(arr); //"[object Array]"

判断对象类型是否为数组

function isArray(arg) {
    if (typeof arg === 'object') {
        return Object.prototype.toString.call(arg) === '[object Array]';
    }
    return false;
}

猜你喜欢

转载自blog.csdn.net/weixin_41989325/article/details/89763558