阵列和放大器之间的区别js中的对象?

时间:2011-10-18 06:28:18

标签: javascript

如何识别阵列&在js中的对象,其中typeof不会派上用场?

 var arr = [], ob = {};

由于js中的所有内容都是对象,

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

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

4 个答案:

答案 0 :(得分:15)

var arr = [], ob = {};

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

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

那么,你将如何识别物体。

这是instanceof运算符派上用场的地方,以确定它是否可以添加一个数组cd:

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

答案 1 :(得分:8)

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

C:\Batch projects\Batch tests\bin\Debug App
  

答案 2 :(得分:1)

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

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

<cfscript>
    adminObj = createObject("component","cfide.adminapi.administrator");
    adminObj.login("admin password");  
    myObj = createObject("component","cfide.adminapi.datasource");
    myObj.setMSSQL(driver="MSSQLServer",
        name="datasourceName", host = "127.0.0.1", port = "1433",
        database = "database", username = "userName", password="password", login_timeout = "30",
        timeout = "20", interval = 7, buffer = "64000", blob_buffer = "64000", setStringParameterAsUnicode = "false",
        description = "", pooling = true, maxpooledstatements = 1000, enableMaxConnections = "true",
        maxConnections = "300", enable_clob = true, enable_blob = true, disable = false, storedProc = true,
        alter = false, grant = true, select = true, update = true, create = true, delete = true, drop = false,
        revoke = false
        );
</cfscript>

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

<cfquery name="createDB" result="res">
    create database #form.dbname#
</cfquery>

第二种方法 使用instanceof数组

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

 var obj = {name: 'name'}; obj.length => undefined

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

注意:Array.isArray比instanceof优先,因为它可以工作 通过iframe。

var rectangle = {length: 50, width: 50}; rectangle.length => 50

如果您要支持i.e 8浏览器,请使用Object.prototype.toString 我们可以为8编写polyfill

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

参考:isArray

答案 3 :(得分:0)

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

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

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