技術頻道導航
HTML/CSS
.NET技術
IIS技術
PHP技術
Js/JQuery
Photoshop
Fireworks
服務器技術
操作系統(tǒng)
網站運營

贊助商

分類目錄

贊助商

最新文章

搜索

慎用 typeof === undefined 判斷變量是否存在

作者:admin    時間:2022-5-16 10:39:9    瀏覽:

JavaScript判斷變量是否存在的方法中,typeof運算符是其中之一。但使用typeof來判斷變量是否存在時,需要特別謹慎,如本文將要介紹的情況,那么typeof就會產生誤判。

typeof運算符

typeof運算符確定變量的類型,可以是以下值之一:'boolean', 'number', 'string', 'symbol', 'object','function'和'undefined'。

typeof === undefined 判斷變量是否存在

當變量未定義,typeof不會拋出ReferenceError,它返回的是undefined。

利用這個特性,我們可以用 typeof === undefined 來判斷某一變量是否存在。但是這不是絕對。

typeof === undefined 判斷變量是否存在會誤判

 

我們看到a已經有定義,但是typeof a還是undefined。因此,typeof === undefined 判斷變量是否存在就會存在誤判。

但是,當a已經賦值,typeof a就不是undefined了。

 

我們看到,當a有賦值時,typeof a返回的是變量的類型,而“類型”是前文說的'number','string'等。

通過對typeof各種情況的分析,結論是,當變量未定義,或變量已定義但未初始化時,typeof === undefined 判斷有效。我們用if語句來表示:

if (typeof myVar === 'undefined') {
  // myVar (未定義) 或 (已定義但未初始化)
} else {
  // myVar (已定義和已初始化)
}

如何正確判斷變量是否存在?

判斷變量是否存在,我們可以用try/catch,還可以用window.hasOwnProperty()等方法,這些我在前面文章3種方法JS判斷變量是否存在或已定義已經詳細舉例介紹過,可前往了解。

JS中typeof的用法詳解

typeof是一個一元運算,放在一個運算數(shù)之前,運算數(shù)可以是任意類型。它返回值是一個字符串,該字符串說明運算數(shù)的類型。

你知道下面typeof運算的結果嗎?

typeof(1);
typeof(NaN);
typeof(Number.MIN_VALUE);
typeof(Infinity);
typeof("123");
typeof(true);
typeof(window);
typeof(document);
typeof(null);
typeof(eval);
typeof(Date);
typeof(sss);
typeof(undefined);

我們來試試看看結果:

alert(typeof(1));          // number
alert(typeof(NaN));        // number
alert(typeof(Number.MIN_VALUE));  // number
alert(typeof(Infinity));      // number 
alert(typeof("123"));       // string
alert(typeof(true));        // boolean
alert(typeof(window));       // object
alert(typeof(document));      // object
alert(typeof(null));        // object
alert(typeof(eval));        // function
alert(typeof(Date));        // function
alert(typeof(sss));        // undefined
alert(typeof(undefined));     // undefined

typeof是一個一元運算符,它返回的結果始終是一個字符串,對不同的操作數(shù),它返回不同的結果。

具體的規(guī)則如下:

1、對于數(shù)字類型的操作數(shù)而言, typeof 返回的值是 number。比如說:typeof(1),返回的值就是number。

上面舉的是常規(guī)數(shù)字,對于非常規(guī)的數(shù)字類型而言,其結果返回的也是number。比如typeof(NaN)NaN在JavaScript中代表的是特殊非數(shù)字值,雖然它本身是一個數(shù)字類型。

在JavaScript中,特殊的數(shù)字類型還有幾種:

  • Infinity                                      表示無窮大特殊值
  • NaN                 特殊的非數(shù)字值
  • Number.MAX_VALUE      可表示的最大數(shù)字
  • Number.MIN_VALUE       可表示的最小數(shù)字(與零最接近)
  • Number.NaN            特殊的非數(shù)字值
  • Number.POSITIVE_INFINITY    表示正無窮大的特殊值
  • Number.NEGATIVE_INFINITY     表示負無窮大的特殊值

以上特殊類型,在用typeof進行運算進,其結果都將是number。

2、對于字符串類型, typeof 返回的值是 string。比如typeof("123")返回的值是string。

3、對于布爾類型, typeof 返回的值是 boolean 。比如typeof(true)返回的值是boolean。

4、對于對象、數(shù)組、null 返回的值是 object 。比如typeof(window)typeof(document)typeof(null)返回的值都是object。

5、 對于函數(shù)類型,返回的值是 function。比如:typeof(eval),typeof(Date)返回的值都是function。

6、如果運算數(shù)是沒有定義的(比如說不存在的變量、函數(shù)或者undefined),將返回undefined。比如:typeof(sss)typeof(undefined)都返回undefined。

看完了六條規(guī)則,再回頭看一下,是不是很簡單了。

JavaScript數(shù)據(jù)類型是非常簡潔的,它只定義了6種基本數(shù)據(jù)類型。

  •  null:空、無。表示不存在,當為對象的屬性賦值為null,表示刪除該屬性。
  • undefined:未定義。當聲明變量卻沒有賦值時會顯示該值??梢詾樽兞抠x值為undefined。
  • number:數(shù)值。最原始的數(shù)據(jù)類型,表達式計算的載體。
  • string:字符串。最抽象的數(shù)據(jù)類型,信息傳播的載體。
  • boolean:布爾值。最機械的數(shù)據(jù)類型,邏輯運算的載體。
  • object:對象。面向對象的基礎。
alert(typeof 1);                // 返回字符串"number"  
alert(typeof "1");              // 返回字符串"string"  
alert(typeof true);             // 返回字符串"boolean"  
alert(typeof {});               // 返回字符串"object"  
alert(typeof []);               // 返回字符串"object "  
alert(typeof function(){});     // 返回字符串"function"  
alert(typeof null);             // 返回字符串"object"  
alert(typeof undefined);        // 返回字符串"undefined"

你會發(fā)現(xiàn):JavaScript解釋器認為null是屬于object數(shù)據(jù)類型的一種特殊形式,而function(){}function類型,也就是說函數(shù)也是一種基本數(shù)據(jù)類型,而不是對象的一種特殊形式。

實際上,在JavaScript中,函數(shù)是一個極容易引起誤解或引發(fā)歧義的數(shù)據(jù)類型,它可以是獨立的函數(shù)類型,又可以作為對象的方法,也可以被稱為類或構造器,還可以作為函數(shù)對象而存在等。

您可能對以下文章也感興趣

標簽: typeof  undefined  
x
  • 站長推薦
/* 左側顯示文章內容目錄 */