在说明如何判断一个对象为数组类型前,我们先巩固下js的数据类型,js一共有六大数据类型:number、string、object、Boolean、null、undefined。
创新互联公司提供网站制作、成都网站制作、网页设计,成都品牌网站建设,1元广告等致力于企业网站建设与公司网站制作,10年的网站开发和建站经验,助力企业信息化建设,成功案例突破上千多家,是您实现网站建设的好选择.
除了前四个类型外,null、对象、数组返回的都是object类型;对于函数类型返回的则是function,再比如typeof(Date),typeof(eval)等。接下来进入正题,js判断数组类型的方法。
instanceof 用于判断一个变量是否某个对象的实例,左边操作数是一个对象,右边操作数是一个函数对象或者函数构造器。原理是通过判断左操作数的对象的原型链上是否具有右操作数的构造函数的prototype属性。
a instanceof b?alert("true"):alert("false") //注意b值是你想要判断的那种数据类型,不是一个字符串,比如Array。
举一个例子:
var arr=[];
console.log(arr instanceof Array) //返回true
在W3C定义中的定义:constructor 属性返回对创建此对象的数组函数的引用,就是返回对象相对应的构造函数。从定义上来说跟instanceof不太一致,但效果都是一样的。
那么判断各种类型的方法:
注意:
使用instaceof和construcor,被判断的array必须是在当前页面声明的!比如,一个页面(父页面)有一个框架,框架中引用了一个页面(子页面),在子页面中声明了一个array,并将其赋值给父页面的一个变量,这时判断该变量,Array ==object.constructor;会返回false;
原因:
1、array属于引用型数据,在传递过程中,仅仅是引用地址的传递。
2、每个页面的Array原生对象所引用的地址是不一样的,在子页面声明的array,所对应的构造函数,是子页面的Array对象;父页面来进行判断,使用的Array并不等于子页面的Array。
isPrototypeOf() 函数 : 用于指示对象是否存在于一个对象的原型链中。如果存在返回true,反之返回false。该方法属Object对象,由于所有的对象都继承了Object的对象实例,因此几乎所有的实例对象都可以使用该方法。如果variable的原型链中存在Array对象,就会返回true,也就说明variable是数组类型。
1、首先创建两个文件,一个jstest.html,一个jstest.js文件。
2、打开html在里面引入jstest.js。
3、打开jstest.js文件,创建一个方法aa。
4、然后接着使用if(typeof aa=="function")判断如果aa方法存在就提示"aa方法存在",否则弹出"aa方法不存在",明显aa是存在的。
5、接着使用if(typeof cc=="function")判断如果cc方法存在就提示"cc方法存在",否则弹出"cc方法不存在",因为我们没有定义cc这个方法,所以cc不存在。
6、打开jstest.html,第一会提示,“aa方法存在”。
JS判断字符串包含的方法具体如下:
1. 例子:
var tempStr = "tempText" ;
var bool = tempStr.indexOf("Texxt");
//返回大于等于0的整数值,若不包含"Text"则返回"-1。
if(bool0){
document.write("包含字符串");
}else{
document.write("不包含字符串");
}
2. indexOf用法:
strObj.indexOf(subString[, startIndex])
JavaScript中indexOf函数方法返回一个整数值,指出 String 对象内子字符串的开始位置。如果没有找到子字符串, 则返回 -1。如果 startindex 是负数,则 startindex 被当作零。如果它比最大的字符位置索引还大,则它被当作最大的可能索引。
参数:
strObj : 必选项,String 对象或文字。
subString :必选项,要在 String 对象中查找的子字符串。
starIndex :可选项,该整数值指出在 String 对象内开始查找的索引。如果省略,则从字符串的开始处查找;
如果 startindex 是负数,则 startindex 被当作零。如果它比最大的字符位置索引还大,则它被当作最大的可能索引。
3. 与lastIndexOf的区别:
lastIndexOf() 方法则是从字符串的结尾开始检索子串。
[img]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。
typeof 是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的数据类型。返回的结果用该类型的字符串(全小写字母)形式表示,包括以下 7 种:number、boolean、symbol、string、object、undefined、function 等。
有些时候,typeof 操作符会返回一些令人迷惑但技术上却正确的值:
对于基本类型,除 null 以外,均可以返回正确的结果。
对于引用类型,除 function 以外,一律返回 object 类型。
对于 null ,返回 object 类型。
对于 function 返回 function 类型。
其中,null 有属于自己的数据类型 Null , 引用类型中的 数组、日期、正则 也都有属于自己的具体类型,而 typeof 对于这些类型的处理,只返回了处于其原型链最顶端的 Object 类型,没有错,但不是我们想要的结果。