js中数组和对象之间的区别?

Ang*_*dar 9 javascript

如何识别js中的数组和对象哪里没有派上用场?

 var arr = [], ob = {};
Run Code Online (Sandbox Code Playgroud)

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

if(typeof arr == typeof ob)  => returns true
Run Code Online (Sandbox Code Playgroud)

我想要一个运算符或......告诉我变量是一个数组.然后我可以只使用数组函数来作为数组的对象.怎么可能?

Ang*_*dar 15

var arr = [], ob = {};
Run Code Online (Sandbox Code Playgroud)

由于js中的所有内容都是对象,因此即使是**Array也是一个Object,而是一个Array类的实例

if(typeof arr == typeof ob)  => returns true as Both are **Objects
Run Code Online (Sandbox Code Playgroud)

那么,你将如何识别对象.

这是instanceof运算符派上用场的地方,以确定它是否可以添加一个额外的检查cde:

if(arr instanceof Object && arr instanceof Array) => returns true 
if(ob instanceof Object && ob instanceof Array) => returns false 
Run Code Online (Sandbox Code Playgroud)

  • @AngelinNadar使用`Object.prototype.toString.call()`或新的`isArray()`. (4认同)

Har*_*ish 10

您可以使用Array.isArray()方法检查变量是否为数组或其他方式.

var myArray = [1,2,3,4,5];
console.log(Array.isArray(myArray));
Run Code Online (Sandbox Code Playgroud)

真正


Nwo*_*uCC 6

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

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

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


Vic*_*mar 5

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

第一种 方法使用长度进行微分,长度属性存在于数组中但不存在于对象上

 var arr = [1,2,3];  arr.length => 3

 var obj = {name: 'name'}; obj.length => undefined
Run Code Online (Sandbox Code Playgroud)

注意:当有人像下面这样声明对象时,这种方法会失败,只有当我们确定不会得到任何具有 length 属性的对象时,我们才能使用这种方法

var rectangle = {length: 50, width: 50}; rectangle.length => 50
Run Code Online (Sandbox Code Playgroud)

第二种方法 使用instanceof数组

var arr = [1,2,3]; arr instanceof Array => true
var obj = {name: 'name'}; ojb instanceof Array => false 
Run Code Online (Sandbox Code Playgroud)

第三种方法 使用Array.isArray,这是最好的方法,现在大多数浏览器都支持

注意:Array.isArray 优于 instanceof,因为它通过 iframe 工作。

Array.isArray(arr) => true
true
Array.isArray(obj) => false
Run Code Online (Sandbox Code Playgroud)

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

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]"
Run Code Online (Sandbox Code Playgroud)

参考:isArray