数组和对象之间的区别在javascript?或者数组Vs对象

Difference between array and object in javascript? or Array Vs Object

本文关键字:数组 对象 Vs 或者 javascript 区别 之间      更新时间:2023-09-26

如何识别数组&对象在js中,typeof不能派上用场?

 var arr = [], ob = {};

js中的所有东西都是对象,

if(typeof arr == typeof ob)  => returns true

我想要一个运算符或者…它会告诉我这个变量是一个数组。然后我可以只使用数组函数来处理数组对象。这怎么可能呢?

var arr = [], ob = {};

由于js中的所有东西都是对象,即使是**Array也是对象,但它是Array类的一个实例

if(typeof arr == typeof ob)  => returns true as Both are **Objects

那么,你将如何识别对象呢?

这就是instanceof操作符派上用场的地方,它可以识别它是否是一个数组,你可以添加一个额外的检查代码:

if(arr instanceof Object && arr instanceof Array) => returns true 
if(ob instanceof Object && ob instanceof Array) => returns false 

您可以使用 array . isarray ()方法来检查变量是否为数组。

var myArray = [1,2,3,4,5];
console.log(Array.isArray(myArray));
真正

在众多简单/复杂的比较中,有一个区别是:

var arr = []; # arr.length => 0

var obj = {}; # obj.length => undefined

有多种方法来区分数组和对象,其中一些已经在上面提到了,我只想补充上面的答案。

第一种方法

使用length进行区分,length属性在Array上存在,但在Object

上不存在
 var arr = [1,2,3];  arr.length => 3
 var obj = {name: 'name'}; obj.length => undefined
注意:当有人像下面这样声明对象时,这种方法会失败,只有当我们确定不会得到任何具有长度属性的对象时,我们才能使用这种方法
var rectangle = {length: 50, width: 50}; rectangle.length => 50

第二种方法使用instanceof Array

var arr = [1,2,3]; arr instanceof Array => true
var obj = {name: 'name'}; ojb instanceof Array => false 

第三种方法使用数组。isArray,这是最可取的方法,现在大多数浏览器都支持

注意:数组。isArray优于instanceof,因为它可以工作通过iframes。

Array.isArray(arr) => true
true
Array.isArray(obj) => false

如果你想支持8浏览器使用Object.prototype.toString我们可以把polyfill写成8

if (!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
}
Object.prototype.toString.call(arr); =>"[object Array]"
Object.prototype.toString.call(obj); =>"[object Object]"

参考:isArray

你可以通过这种方式知道真正的对象:

if (typeof x === "object" && !(x instanceof Object && x instanceof Array)) console.log(x);

,其中x为变量。