Array.isArray and Object.prototype.toString.call

Array.isArray() 用于确定传递的值是否是一个 Array。

Array.isArray([1, 2, 3]);
// true

Array.isArray({foo: 123});
// false

Array.isArray("foobar");
// false

Array.isArray(undefined);
// false

Array.isArray(null);
// false

Array.isArray(new Array());
// true

Array.isArray(new Array());
// true

Array.isArray(Array.prototype);
// true

假如不存在 Array.isArray(),则在其他代码之前运行下面的代码将创建该方法。

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

相关问题

使用 typeof bar === "object" 判断 bar 是不是一个对象有神马潜在的弊端?如何避免这种弊端?

使用 typeof 的弊端是显而易见的(这种弊端同使用 instanceof):

let obj = {};
let arr = [];

console.log(typeof obj === ‘object‘);  //true
console.log(typeof arr === ‘object‘);  //true
console.log(typeof null === ‘object‘);  //true

从上面的输出结果可知,typeof bar === "object" 并不能准确判断 bar 就是一个 Object。可以通过 Object.prototype.toString.call(bar) === "[object Object]" 来避免这种弊端:

let obj = {};
let arr = [];

console.log(Object.prototype.toString.call(obj));  //[object Object]
console.log(Object.prototype.toString.call(arr));  //[object Array]
console.log(Object.prototype.toString.call(null));  //[object Null]

但是Object.prototype.toString.call(),为什么可以判断类型呢?

(1) call() 方法调用一个函数, 其具有一个指定的this值和分别地提供的参数(参数的列表)。

fun.call(thisArg, arg1, arg2, ...)

//thisArg:
//在fun函数运行时指定的this值。需要注意的是,指定的this值并不一定是该函数执行时真正的this值,如果这个函数处于非严格模式下,则指定为null和undefined的this值会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this会指向该原始值的自动包装对象。

//arg1, arg2, ...:
//指定的参数列表。

//返回值:
//返回值是你调用的方法的返回值,若该方法没有返回值,则返回undefined。

(2) Object.prototype.toString()方法返回一个表示该对象的字符串。

此方法在自定义对象中未被覆盖,toString() 返回 "[object type]",其中type是对象的类型。

var toString = Object.prototype.toString;

toString.call(new Date);   //[object Date]

toString.call(new Object);  //[object Object]
toString.call({});  //[object Object]

toString.call(new Array());  //[object Array]
toString.call([]);  //[object Array]

toString.call(new String());  //[object String]
toString.call(‘‘);  //[object String]

toString.call(undefined);  //[object Undefined]
toString.call(null);  //[object Null]
toString.call(Math);  //[object Math]

toString.call(function(){});  //[object Function]
toString.call(Window);  //[object Function]

1.Array.isArray()

2.Object.prototype.toString()

3.Function.prototype.call()

原文地址:https://www.cnblogs.com/xmyun/p/8350978.html

时间: 2024-08-04 13:29:19

Array.isArray and Object.prototype.toString.call的相关文章

js中通过Object.prototype.toString方法----精确判断对象的类型

判断是否为函数 function isFunction(it) {        return Object.prototype.toString.call(it) === '[object Function]';    } 判断是否为数组: function isArray(o) {   return Object.prototype.toString.call(o) === '[object Array]';  } 由于 JavaScript 中一切都是对象,任何都不例外,对所有值类型应用

Object.prototype.toString.call() 区分对象类型

在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种.对于数组.函数.对象,使用 typeof 都会统一返回 “object” 字符串. 有这样一种方法,即使用 Object.prototype.toString.call() 来确定类型. 由于 JavaScript 中一切都是对象,任何都不例外,对所有值类型应用 Object.prototype.toStri

typeof 、Object.prototype.toString和 instanceof

数据类型 js 基本类型包括:Undefined  symbol null string boolean number js 引用类型包括:object array Date RegExp typeof 我们一般用typeof来判断数据的类型的 接下来我们试试 console.log(typeof undefined) //undefined console.log(typeof null) //object console.log(typeof Undefined) //undefined c

为什么用Object.prototype.toString.call(obj)检测对象类型?

console.log(Object.prototype.toString.call("jerry"));//[object String]console.log(Object.prototype.toString.call(12));//[object Number]console.log(Object.prototype.toString.call(true));//[object Boolean]console.log(Object.prototype.toString.call

用Object.prototype.toString.call() 区分对象类型

在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” 五种.对于数组.函数.对象来说,其关系错综复杂,使用 typeof 都会统一返回 “object” 字符串. 要想区别对象.数组.函数单纯使用 typeof 是不行的.或者你会想到 instanceof 方法,例如下面这样: var a = {}; var b = []; var c = function () {

类型判断----小白讲解typeof,instanceof,Object.prototype.toString.call()

1.typeof只能判断基本类型数据, 例子: typeof 1 // "number" typeof '1' // "string" typeof true // "boolean" typeof {} // "object" typeof [] // "object" typeof function(){} // "function" typeof undefined // &quo

Object.prototype.toString.call(obj)检测数据类型

typeof bar=='object' 不能确切判断数据是一个‘纯粹’的对象 Array null的结果都是object 比较好的方法是: Object.prototype.toString.call(bar)=='[object Object]'; 使用以上方法可以很好的区分各种类型: console.log(Object.prototype.toString.call(""));//[object String] console.log(Object.prototype.toSt

用Object.prototype.toString.call(obj)检测对象类型原因分析

用Object.prototype.toString.call(obj)检测对象类型原因分析 更新时间:2018年10月11日 08:46:33   投稿:laozhang    我要评论 在本篇文章里我们给大家剖析了用Object.prototype.toString.call(obj)检测对象类型的原因,需要的朋友们可以学习下. 这是一个十分常见的问题,用 typeof 是否能准确判断一个对象变量,答案是否定的,null 的结果也是 object,Array 的结果也是 object,有时候

JavaScript的数据类型都有什么? JavaScript中 toStirng() 与 Object.prototype.toString().call()

JavaScript的数据类型都有什么? (via  BAT互联网公司2014前端笔试面试题:JavaScript篇  http://www.sxt.cn/u/756/blog/4508) 基本数据类型:String,boolean,Number,Undefined, Null 引用数据类型: Object(Array,Date,RegExp,Function) 疑问:这些基本的数据类型的值都是常量,而常量是没有方法的,为什么能够调用方法呢?答案是这样的,五种基本类型除了null.undefin