在說明如何判斷一個(gè)對象為數(shù)組類型前,我們先鞏固下js的數(shù)據(jù)類型,js一共有六大數(shù)據(jù)類型:number、string、object、Boolean、null、undefined。
創(chuàng)新互聯(lián)公司提供網(wǎng)站制作、成都網(wǎng)站制作、網(wǎng)頁設(shè)計(jì),成都品牌網(wǎng)站建設(shè),1元廣告等致力于企業(yè)網(wǎng)站建設(shè)與公司網(wǎng)站制作,10年的網(wǎng)站開發(fā)和建站經(jīng)驗(yàn),助力企業(yè)信息化建設(shè),成功案例突破上千多家,是您實(shí)現(xiàn)網(wǎng)站建設(shè)的好選擇.
除了前四個(gè)類型外,null、對象、數(shù)組返回的都是object類型;對于函數(shù)類型返回的則是function,再比如typeof(Date),typeof(eval)等。接下來進(jìn)入正題,js判斷數(shù)組類型的方法。
instanceof 用于判斷一個(gè)變量是否某個(gè)對象的實(shí)例,左邊操作數(shù)是一個(gè)對象,右邊操作數(shù)是一個(gè)函數(shù)對象或者函數(shù)構(gòu)造器。原理是通過判斷左操作數(shù)的對象的原型鏈上是否具有右操作數(shù)的構(gòu)造函數(shù)的prototype屬性。
a instanceof b?alert("true"):alert("false") //注意b值是你想要判斷的那種數(shù)據(jù)類型,不是一個(gè)字符串,比如Array。
舉一個(gè)例子:
var arr=[];
console.log(arr instanceof Array) //返回true
在W3C定義中的定義:constructor 屬性返回對創(chuàng)建此對象的數(shù)組函數(shù)的引用,就是返回對象相對應(yīng)的構(gòu)造函數(shù)。從定義上來說跟instanceof不太一致,但效果都是一樣的。
那么判斷各種類型的方法:
注意:
使用instaceof和construcor,被判斷的array必須是在當(dāng)前頁面聲明的!比如,一個(gè)頁面(父頁面)有一個(gè)框架,框架中引用了一個(gè)頁面(子頁面),在子頁面中聲明了一個(gè)array,并將其賦值給父頁面的一個(gè)變量,這時(shí)判斷該變量,Array ==object.constructor;會返回false;
原因:
1、array屬于引用型數(shù)據(jù),在傳遞過程中,僅僅是引用地址的傳遞。
2、每個(gè)頁面的Array原生對象所引用的地址是不一樣的,在子頁面聲明的array,所對應(yīng)的構(gòu)造函數(shù),是子頁面的Array對象;父頁面來進(jìn)行判斷,使用的Array并不等于子頁面的Array。
isPrototypeOf() 函數(shù) : 用于指示對象是否存在于一個(gè)對象的原型鏈中。如果存在返回true,反之返回false。該方法屬Object對象,由于所有的對象都繼承了Object的對象實(shí)例,因此幾乎所有的實(shí)例對象都可以使用該方法。如果variable的原型鏈中存在Array對象,就會返回true,也就說明variable是數(shù)組類型。
1、首先創(chuàng)建兩個(gè)文件,一個(gè)jstest.html,一個(gè)jstest.js文件。
2、打開html在里面引入jstest.js。
3、打開jstest.js文件,創(chuàng)建一個(gè)方法aa。
4、然后接著使用if(typeof? aa=="function")判斷如果aa方法存在就提示"aa方法存在",否則彈出"aa方法不存在",明顯aa是存在的。
5、接著使用if(typeof? cc=="function")判斷如果cc方法存在就提示"cc方法存在",否則彈出"cc方法不存在",因?yàn)槲覀儧]有定義cc這個(gè)方法,所以cc不存在。
6、打開jstest.html,第一會提示,“aa方法存在”。
JS判斷字符串包含的方法具體如下:
1. 例子:
var tempStr = "tempText" ;
var bool = tempStr.indexOf("Texxt");
//返回大于等于0的整數(shù)值,若不包含"Text"則返回"-1。
if(bool0){
document.write("包含字符串");
}else{
document.write("不包含字符串");
}
2. indexOf用法:
strObj.indexOf(subString[, startIndex])
JavaScript中indexOf函數(shù)方法返回一個(gè)整數(shù)值,指出 String 對象內(nèi)子字符串的開始位置。如果沒有找到子字符串, 則返回 -1。如果 startindex 是負(fù)數(shù),則 startindex 被當(dāng)作零。如果它比最大的字符位置索引還大,則它被當(dāng)作最大的可能索引。
參數(shù):
strObj : 必選項(xiàng),String 對象或文字。
subString :必選項(xiàng),要在 String 對象中查找的子字符串。
starIndex :可選項(xiàng),該整數(shù)值指出在 String 對象內(nèi)開始查找的索引。如果省略,則從字符串的開始處查找;
如果 startindex 是負(fù)數(shù),則 startindex 被當(dāng)作零。如果它比最大的字符位置索引還大,則它被當(dāng)作最大的可能索引。
3. 與lastIndexOf的區(qū)別:
lastIndexOf() 方法則是從字符串的結(jié)尾開始檢索子串。
[img]typeof都返回object
在JavaScript中所有數(shù)據(jù)類型嚴(yán)格意義上都是對象,但實(shí)際使用中我們還是有類型之分,如果要判斷一個(gè)變量是數(shù)組還是對象使用typeof搞不定,因?yàn)樗挤祷豲bject
復(fù)制代碼
代碼如下:
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);
執(zhí)行:
復(fù)制代碼
代碼如下:
o
typeof
is
object
a
typeof
is
object
因此,我們只能放棄這種方法,要判斷是數(shù)組or對象有兩種方法
第一,使用typeof加length屬性
數(shù)組有l(wèi)ength屬性,object沒有,而typeof數(shù)組與對象都返回object,所以我們可以這么判斷
復(fù)制代碼
代碼如下:
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可以判斷一個(gè)變量是不是數(shù)組,如:
復(fù)制代碼
代碼如下:
var
o
=
{
'name':'lee'
};
var
a
=
['reg','blue'];
alert(
a
instanceof
Array
);
//
true
alert(
o
instanceof
Array
);
//
false
也可以判斷是不是屬于object
復(fù)制代碼
代碼如下:
var
o
=
{
'name':'lee'
};
var
a
=
['reg','blue'];
alert(
a
instanceof
Object
);
//
true
alert(
o
instanceof
Object
);
//
true
但數(shù)組也是屬于object,所以以上兩個(gè)都是true,因此我們要利用instanceof判斷數(shù)據(jù)類型是對象還是數(shù)組時(shí)應(yīng)該優(yōu)先判斷array,最后判斷object
復(fù)制代碼
代碼如下:
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
如果你不優(yōu)先判斷Array,比如:
復(fù)制代碼
代碼如下:
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
那么數(shù)組也會被判斷為object。
typeof 是一個(gè)操作符,其右側(cè)跟一個(gè)一元表達(dá)式,并返回這個(gè)表達(dá)式的數(shù)據(jù)類型。返回的結(jié)果用該類型的字符串(全小寫字母)形式表示,包括以下 7 種:number、boolean、symbol、string、object、undefined、function 等。
有些時(shí)候,typeof 操作符會返回一些令人迷惑但技術(shù)上卻正確的值:
對于基本類型,除 null 以外,均可以返回正確的結(jié)果。
對于引用類型,除 function 以外,一律返回 object 類型。
對于 null ,返回 object 類型。
對于 function 返回 ?function 類型。
其中,null 有屬于自己的數(shù)據(jù)類型 Null , 引用類型中的 數(shù)組、日期、正則 也都有屬于自己的具體類型,而 typeof 對于這些類型的處理,只返回了處于其原型鏈最頂端的 Object 類型,沒有錯(cuò),但不是我們想要的結(jié)果。