2012-07-20 22 views
6

我想檢查Apps腳本中的變量是否爲String,但發現當變量實際上是字符串時,instanceof未返回true。以下測試:instanceof字符串在Google Apps腳本中的行爲不如預期

function test_instanceof() { 
    var a = "a"; 
    Logger.log('"a" is ' + ((a instanceof String) ? '' : 'not ') + 'a String'); 
    var b = String("b"); 
    Logger.log('String("b") is ' + ((b instanceof String) ? '' : 'not ') + 'a String'); 
} 

日誌這兩個消息:

"a" is not a String 
String("b") is not a String 

的文檔是不被支持的ECMAScript的子集清楚,但顯然的instanceof是一個有效的操作符和字符串是一個有效的類型,從 代碼執行沒有例外的事實判斷。

什麼是檢查變量類型的適當方法?

回答

7

這是標準的EcmaScript三

你的代碼是做什麼的JavaScript預計:在這裏看到的equivalent JavaScript running in your browser

實例檢查原型鏈中的匹配構造函數。這對通過「新建」創建的對象很有用,但對字符串不是很有幫助。你真正想要的字符串是typeof,如this example in your browser或相應的Apps腳本代碼所示:

function test_instanceof() { 
    var a = "a"; 
    Logger.log('"a" is ' + ((typeof a == 'string') ? '' : 'not ') + 'a String'); 
    var b = String("b"); 
    Logger.log('String("b") is ' + ((typeof b == 'string') ? '' : 'not ') + 'a String'); 
} 
+0

Doh!我最近花了很多時間寫Python,忘記了JavaScript的這些細節。感謝您的複習。 – 2012-07-20 12:20:22

相關問題