ECMAScript中有5種簡(jiǎn)單數(shù)據(jù)類型(也稱為基本數(shù)據(jù)類型):Undefined. Null. Boolean、Number和String。還有1神復(fù)雜數(shù)據(jù)類型-Object,Object本質(zhì)上是由一組無(wú)序的名值對(duì)組成的。ECMAScript 不支持任何創(chuàng)建自定義類型的機(jī)制,而所有值最終都將是上述6種數(shù)據(jù)類型之一。乍一看,好像只有6種數(shù)據(jù)類型不足以表示所有數(shù)據(jù);但是,由于ECMAScript數(shù)據(jù)類型具有動(dòng)態(tài)性,因此的確沒(méi)有再定義其他數(shù)據(jù)類型的必要了。
1. typeof操作符
鑒于ECMAScript是松散類型的,因此需要有一種手段來(lái)檢測(cè)給定變量的數(shù)據(jù)類型typeof就是負(fù)責(zé)提供這方面信息的操作符。對(duì)一個(gè)值使用typeof操作符可能返回下列某個(gè)字符串:
”undefined”——如果這個(gè)值未定義;
”boolean”——如果這個(gè)值是布爾值;
”string”——如果這個(gè)值是字符串;
”number”——如果這個(gè)值是數(shù)值;
”object”——如果這個(gè)值是對(duì)象或null;
”function”——如果這個(gè)值是函數(shù)。
下面是幾個(gè)使用typeof操作符的例子:
var message= "some string";
alert (typeof message); //"string"
alert(typeof (message)); //"string"
alert (typeof 95); // "number"
這幾個(gè)例子說(shuō)明,typeof操作符的操作數(shù)可以是變量(message),也可以是數(shù)值字面量。注意,typeof是一個(gè)操作符而不是函數(shù),因此例子中的圓括號(hào)不是必需的(盡管可以使用)。
南昌網(wǎng)站建設(shè)公司百恒網(wǎng)絡(luò)前端開(kāi)發(fā)工程師提醒廣大企業(yè)網(wǎng)站建設(shè)公司技術(shù)人員和站長(zhǎng):從技術(shù)角度講,函數(shù)在ECMAscript中是對(duì)象,不是一種數(shù)據(jù)類型,然而,函數(shù)也確實(shí)有一些特殊的屬性,因此通過(guò)typeof操作符來(lái)區(qū)分函數(shù)和其他對(duì)象是有必要的.
2. Undefined類型
Undefined類型只有一個(gè)值,即特殊的undefined。在使用var聲明變量但未對(duì)其加以初始化時(shí),這個(gè)變量的值就是undefined,例如:
var message;
alert (message==undefined); //true
這個(gè)例子只聲明了變量message,但未對(duì)其進(jìn)行初始化。比較這個(gè)變量與undefined宇面量,結(jié)果表明它們是相等的。這個(gè)例子與下面的例子是等價(jià)的:
var messagei = undefined;
alert (message==undefined); //true
這個(gè)例子使用undefined值顯式初始化了變量message。但我們沒(méi)有必要這么做,因?yàn)槲唇?jīng)初始化的值默認(rèn)就會(huì)取得undefined值。
南昌網(wǎng)絡(luò)公司百恒網(wǎng)絡(luò)前端開(kāi)發(fā)工程師提示:一般而言,不存在需要顯式地把一個(gè)變量設(shè)置為undefined 值的情況,字面值undefined的主要目的是用于比較,而ECMA-262第3版之前的版本中沒(méi)有規(guī)定這個(gè)值.第3版引入這個(gè)值是為了正式區(qū)分空對(duì)象指針與未經(jīng)初始化的變量. undefined值的變量與尚未定義的變量還是不一樣的??纯聪旅孢@個(gè)例子:
var message; //這個(gè)變量聲明之后默認(rèn)取得了undefined值
//下面這個(gè)變量并沒(méi)有聲明
//var age
alert (message); // ”undefined“
alert( age); //產(chǎn)生錯(cuò)誤
運(yùn)行以上代碼,第一個(gè)警告框會(huì)顯示變量message的值,即undefined”。而第二個(gè)警告框——由于傳遞給alert()函數(shù)的是尚未聲明的變量age-則會(huì)導(dǎo)致一個(gè)錯(cuò)誤。對(duì)于尚未聲明過(guò)的變量,只能執(zhí)行一項(xiàng)操作,即使用typeof操作符檢測(cè)其數(shù)據(jù)類型。
然而,令人困惑的是:對(duì)未初始化的變量執(zhí)行typeof操作符會(huì)返回unde fined值,而對(duì)未聲明的變量執(zhí)行typeof操作符同樣也會(huì)返回undefined值。來(lái)看下面的例子:
var message;//這個(gè)變量聲明之后默認(rèn)取得了undefined值
//下面這個(gè)變量并沒(méi)有聲明
//var age
alert( typeof message); //"undefined"
alert(typeof age); //"undefined"
結(jié)果表明’對(duì)未初始化和未聲明的變量執(zhí)行typeof操作符都返回了undefined值;這個(gè)結(jié)果有其邏輯上的合理性。因?yàn)殡m然這兩種變量從技術(shù)角度看有本質(zhì)區(qū)別,但實(shí)際上無(wú)論對(duì)哪種變量也不可能執(zhí)行真正的操作。 南昌建網(wǎng)站公司前端開(kāi)發(fā)工程師提示:即使示初始化的變量會(huì)自動(dòng)賦予undefined值,但南昌網(wǎng)站制作公司前端開(kāi)發(fā)工程師認(rèn)為顯式地初始化變量依然是明智的選擇,如果能夠做到這一點(diǎn),那么當(dāng)typeof操作符返回undefined值時(shí),我們就知道檢測(cè)的變量還沒(méi)有被聲明,而不是尚未初始化.
希望對(duì)廣大站長(zhǎng)或網(wǎng)站建設(shè)公司或從事企業(yè)網(wǎng)站建設(shè)的小團(tuán)隊(duì)有所幫助,如對(duì)此不太理解的,可以與南昌網(wǎng)絡(luò)公司百恒網(wǎng)絡(luò)技術(shù)部聯(lián)系。我們很高與廣大站長(zhǎng)和網(wǎng)站建設(shè)公司技術(shù)人員分享我們的技術(shù)和經(jīng)驗(yàn)。