今天看了Javascript的基礎教程,其中說了一個關於typeof的問題。typeof運算符的做用就是返回一個變量的類型,若是變量是一個數字,則返回number。javascript
若是是字符串,則返回string,java
布爾類型則返回boolean,函數
函數則返回function,spa
若是變量是null或者其餘Javascript對象,就返回object。對象
未定義就返回undefined.教程
若是要判斷變量存在,並且是一個字符串的話;給出的判斷語句是:ip
if( (typeof unknownVariable != "undefined") && ( typeof unknownVariable.valueOf() == "string") ) { ... }內存
第一個先判斷變量有沒有定義,若是沒有定義的話就不用判斷第二個條件了,而第二個條件中爲何要加上valueOf這個運算符呢?我上網找了一下Java的string方面的知識;字符串
發現原來string類型有兩種定義方式,一種是直接定義,例如:String str ="javascript";這種至關於直接量,若是沒有valueOf的話,用typeof返回的也是string;而另一種是經過聲明定義的,例如:String str = new String("javascript");這種在沒有valueOf的狀況下,用typeof返回到的就是object,也就是說不能識別爲字符串類型。所以爲了不這種狀況,要加入valueOf運算符。string
書中給的解釋是說,使用valueOf返回的是一個字符串直接量。其實也就是取得string的原始值。
因此在Java中咱們通常定義string的直接量。這樣還能夠防止內存中太多冗餘的string對象。