
build網(wǎng)站制作 |
網(wǎng)站制作技術(shù)之javascript篇當(dāng)前位置:首頁(yè)>主要服務(wù)>網(wǎng)站制作>JS/Jquery![]() 網(wǎng)站制作技術(shù)之javascript篇 -----JavaScript 類型檢測(cè)方法
在JavaScript中要檢測(cè)一個(gè)變量是不是基本類型?typeof操作符是最佳的工具。更具體的說(shuō),typeof是確定一個(gè)變量是字符串、數(shù)值、布爾值、還是undefined的最佳工具。如果變量的值是一個(gè)對(duì)象或null,則typeof操作會(huì)像下面例子中所示的那樣返回“object”。
var s = "w3ctech"; var b = true; var i = 22; var u; var n = null; var o = new Object(); alert(typeof s); //string alert(typeof i); //number alert(typeof b); //boolean alert(typeof u); //undefined alert(typeof n); //object alert(typeof o);
雖然在檢測(cè)基本數(shù)據(jù)類型時(shí)typeof是非常得力的助手,但是在檢測(cè)引用類型的值時(shí), 這個(gè)操作符的用處不大。通常,我們并不是想知道某個(gè)值是對(duì)象,而是想知道它是什么類型的對(duì)象。為此,ECMAScript提供了instanceof操作符,其語(yǔ)法如下:
result = variable instanceof constructor
如果變量是給定引用類型(由構(gòu)造函數(shù)表示)的實(shí)例,那么instanceof操作符就會(huì)返回true。請(qǐng)看下面的例子:
alert(person instanceof Object); //變量person 是 Object嗎? alert(colors instanceof Array); //變量colors 是 Array嗎? alert(pattern instanceof RegExp); //變量pattern 是 RegExp嗎?
根據(jù)規(guī)定,所有引用類型的值都是Object的實(shí)例。因此,在檢測(cè)一個(gè)引用類型值和Object構(gòu)造函數(shù)時(shí),instanceof操作符始終會(huì)返回true。當(dāng)然如果使用instanceof操作符檢測(cè)基本類型的值,則始終會(huì)返回false。因此基本類型不是對(duì)象。 var arr = []; arr.__proto__ = {}; arr instanceof Array;//false
所以才有借助ECMAScript object內(nèi)部屬性[[Class]]的需求.即{}.toString.call(arr)的出現(xiàn).那么還有沒有其他辦法呢? 答案是yes. 參考下面的代碼:
var arr =[]; arr.constructor && arr.constructor == Array.toString();// true.
原理是通過比較對(duì)象構(gòu)造器的字符串表示.當(dāng)然,嚴(yán)格來(lái)說(shuō).這些信息都是可以后期偽造或更改的. 所以還是{}.toString.call是最靠譜的做法.但,你應(yīng)該了解,從性能角度來(lái)說(shuō). typeof的性能是最佳的. 而 constructor 和{}.toString.call 在IE系則是constructor的性能要比后者高那么一丁點(diǎn).而在非IE.后者的效率要比constructor方式性能高10倍左右. 所以最佳實(shí)踐不用說(shuō)了,只要不是 object.建議使用typeof.否則用{}.toString.call.
網(wǎng)站動(dòng)態(tài)
|

易勢(shì)網(wǎng)站制作,以DIV+CSS為主,js/jQuery為輔,制作利于優(yōu)化,頁(yè)面美觀的優(yōu)質(zhì)網(wǎng)站!

網(wǎng)絡(luò)策劃公司|新浪官方微博|大連網(wǎng)站建設(shè)
沈陽(yáng)易勢(shì)科技有限公司 網(wǎng)站制作網(wǎng)絡(luò)營(yíng)銷公司 © 2011 , All rights reserved. 公司地址:沈陽(yáng)市鐵西區(qū)貴和街道建設(shè)中路15號(hào)淺草綠閣商務(wù)樓402室沈陽(yáng)網(wǎng)站制作易勢(shì)最專業(yè)
遼B2-20150173-8