此博客是本人从学生时代开始做笔记所用, 部分是工作所遇问题,做填坑笔记,部分闲来查阅资料,加上自己的理解所总结的学习笔记, 常忙得不可开交,若漏了资料来源,望通知~ 前路漫漫,写点东西告诉自己正在一点点进步,而不要迷失于繁忙。

判断对象是否为数组/函数

打印Object的prototype属性:

有一个toString方法,不同于一般变量的toString方法,当Object的toString方法执行时:

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

2.返回 "[object " + 第一步得出的值+ "]"格式的字符串,例如[object Array],

 

解析:

[[Class]]是一种内部属性,所有的对象(原生对象和宿生对象)都拥有该属性,描述该对象的类型

值得注意的是[[Class]]的值只能是Object, Number, String, Date等javaScript内置的数据类型,不能用于构造函数产生的对象

 

于是,再借用call方法: 调用toString方法,并用另一个对象替换当前对象Object。

 

console.log(Object.prototype.toString.call(11)); //[object Number]
console.log(Object.prototype.toString.call("12")); //[object String]
console.log(Object.prototype.toString.call(true)); //[object Boolean]
console.log(Object.prototype.toString.call({})); //[object Object]
console.log(Object.prototype.toString.call(undefined)); //[object Undefined]
console.log(Object.prototype.toString.call(new Date)); //[object Date]
console.log(Object.prototype.toString.call(null)); //[object Null]
console.log(Object.prototype.toString.call([1,2,3])); //[object Array]
console.log(Object.prototype.toString.call(function(){})); //[object Function]

 

这个方法是多用于判断变量是数组/函数的情况

 

还有一种更简单的判断数组的方法:Array.isArray(arrayObj),当arrayObj为数组时,返回true,否则,返回false,但这种方法有兼容性问题,因此,最好的解决方法是:

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

此方法对任何类型的变量都管用,包括null、undefined。。。

posted @ 2017-01-28 17:40  炎泽  阅读(442)  评论(0编辑  收藏  举报