成都网站建设设计

将想法与焦点和您一起共享

javascript对象数组,js数组对象方法

javascript怎么创建对象数组??

var objmoList1=new Array();//数组var objmo=new Object();//对象objmo.s="11";//对象里面的属性objmo.t="22";objmoList1.push(objmo);alert(objmoList1[0].s);

创新互联公司网站建设由有经验的网站设计师、开发人员和项目经理组成的专业建站团队,负责网站视觉设计、用户体验优化、交互设计和前端开发等方面的工作,以确保网站外观精美、成都网站设计、成都网站制作、外贸网站建设易于使用并且具有良好的响应性。

JavaScript判断变量是对象还是数组的方法

typeof都返回object

在JavaScript中所有数据类型严格意义上都是对象,但实际使用中我们还是有类型之分,如果要判断一个变量是数组还是对象使用typeof搞不定,因为它全都返回object

复制代码

代码如下:

var

o

=

{

'name':'lee'

};

var

a

=

['reg','blue'];

document.write(

'

o

typeof

is

'

+

typeof

o);

document.write(

'

br

/');

document.write(

'

a

typeof

is

'

+

typeof

a);

执行:

复制代码

代码如下:

o

typeof

is

object

a

typeof

is

object

因此,我们只能放弃这种方法,要判断是数组or对象有两种方法

第一,使用typeof加length属性

数组有length属性,object没有,而typeof数组与对象都返回object,所以我们可以这么判断

复制代码

代码如下:

var

o

=

{

'name':'lee'

};

var

a

=

['reg','blue'];

var

getDataType

=

function(o){

if(typeof

o

==

'object'){

if(

typeof

o.length

==

'number'

){

return

'Array';

}else{

return

'Object';

}

}else{

return

'param

is

no

object

type';

}

};

alert(

getDataType(o)

);

//

Object

alert(

getDataType(a)

);

//

Array

alert(

getDataType(1)

);

//

param

is

no

object

type

alert(

getDataType(true)

);

//

param

is

no

object

type

alert(

getDataType('a')

);

//

param

is

no

object

type

第二,使用instanceof

使用instanceof可以判断一个变量是不是数组,如:

复制代码

代码如下:

var

o

=

{

'name':'lee'

};

var

a

=

['reg','blue'];

alert(

a

instanceof

Array

);

//

true

alert(

o

instanceof

Array

);

//

false

也可以判断是不是属于object

复制代码

代码如下:

var

o

=

{

'name':'lee'

};

var

a

=

['reg','blue'];

alert(

a

instanceof

Object

);

//

true

alert(

o

instanceof

Object

);

//

true

但数组也是属于object,所以以上两个都是true,因此我们要利用instanceof判断数据类型是对象还是数组时应该优先判断array,最后判断object

复制代码

代码如下:

var

o

=

{

'name':'lee'

};

var

a

=

['reg','blue'];

var

getDataType

=

function(o){

if(o

instanceof

Array){

return

'Array'

}else

if(

o

instanceof

Object

){

return

'Object';

}else{

return

'param

is

no

object

type';

}

};

alert(

getDataType(o)

);

//

Object

alert(

getDataType(a)

);

//

Array

alert(

getDataType(1)

);

//

param

is

no

object

type

alert(

getDataType(true)

);

//

param

is

no

object

type

alert(

getDataType('a')

);

//

param

is

no

object

type

如果你不优先判断Array,比如:

复制代码

代码如下:

var

o

=

{

'name':'lee'

};

var

a

=

['reg','blue'];

var

getDataType

=

function(o){

if(o

instanceof

Object){

return

'Object'

}else

if(

o

instanceof

Array

){

return

'Array';

}else{

return

'param

is

no

object

type';

}

};

alert(

getDataType(o)

);

//

Object

alert(

getDataType(a)

);

//

Object

alert(

getDataType(1)

);

//

param

is

no

object

type

alert(

getDataType(true)

);

//

param

is

no

object

type

alert(

getDataType('a')

);

//

param

is

no

object

type

那么数组也会被判断为object。

JavaScript 里的类数组对象

很早以前我就知道可以把

arguments

转化为数组:[].slice.call(arguments),因为

arguments

是个类数组对象,所以才可以这么用。但是我一直不清楚什么叫做类数组对象(

array-like

objects)

今天看

Effective

JavaScript

就有一节是专门讲这个的,感觉真是太拽了。

先看我写的一些示例代码:

复制代码

代码如下:

a

=

"hello"

[].map.call(a,

(e)

-

e.toUpperCase())

#

=

[

'H',

'E',

'L',

'L',

'O'

]

[].reduceRight.call(a,

(acc,

e)

-

acc

+

e)

#

=

'olleh'

b

=

{1:

"a",

2:

"b",

4:

"c",

length:

6}

[].reduce.call(b,

(acc,

e)

-

acc

+

e)

#

=

'abc'

前面那几个是操作字符串的,嗯,字符串也可以看成类数组对象。但是后面那个

b

对象居然

也是类数组对象。

看书上的解释:

复制代码

代码如下:

So

what

exactly

makes

an

object

“array-like”?

The

basic

contract

of

an

array

object

amounts

to

two

simple

rules.

It

has

an

integer

length

property

in

the

range

0...2^32

1.

The

length

property

is

greater

than

the

largest

index

of

the

object.

An

index

is

an

integer

in

the

range

0...2^32

2

whose

string

representation

is

the

key

of

a

property

of

the

object.

居然只有这两条简单的规则。

所以为什么

arguments,

字符串,和上面那个

b

对象可以看作类数组对象呢?

它们都有一个合法的

length

属性(0

2**32

-

1

之间的正整数)。

length

属性的值大于它们的最大索引(index)。

再举个例子:

复制代码

代码如下:

b

=

{1:

"a",

2:

"b",

4:

"c",

length:

3}

[].reduce.call(b,

(acc,

e)

-

acc

+

e)

#

=

'ab'

嗯,就不对了,成了'ab'

了,因为违反了规则2:length

属性是3,

最大索引值是4要比

length

属性大了。所以表现的不正常了。

太强大了,好像只是定义了一个接口,只要符合这个接口,就可以利用数组的所有方法。

其实不是可以利用所有方法,Array.prototype.concat

是不能用的,因为它是把两个数组连接起来,你不是数组肯定是没法用它的。

还有一个小问题是,字符串创建以后是不可变的(immutable),所以你怎么折腾它都是不可变的。

但是这本书根本就没有解释为什么是符合这两个条件就可以看成类数组对象,另外这本书的作者

是那个什么

ECMAScript

委员会的成员,所以基本还是可信的。至于为什么符合这两个条件就可以看成是类数组对象,我也不知道,谷歌搜了半天也没看到什么合理的解释。

以上所述就是本文的全部内容了,希望大家能够喜欢。


网站标题:javascript对象数组,js数组对象方法
分享链接:http://chengdu.cdxwcx.cn/article/dsecece.html