2012-07-20 4 views
6

Apps Scriptの変数がStringかどうかを確認したいのですが、変数が実際に文字列だったときにinstanceofがtrueを返さないことがわかりました。次のテスト:どうやらinstanceofは有効な演算子であり、文字列が有効であるにもかかわらずinstanceof Google Apps Scriptで期待通りに動作しない文字列

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

ドキュメントは、サポートされているのECMAScriptのサブセットで明らかにされていない:

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'); 
} 

は、これら2つのメッセージをログに記録します例外なしでコードが実行されたという事実から判断すると、となります。

変数のタイプを確認する適切な方法は何ですか? equivalent JavaScript running in your browserについてはこちらを参照してください。

答えて

7

それは標準のECMAScriptだ3.

あなたのコードでは、JavaScriptが期待するものやっています。

Instanceofはプロトタイプチェーン内の一致するコンストラクタをチェックします。これは 'new'を介して作成されたオブジェクトには適していますが、文字列にはあまり役に立ちません。あなたが実際にStringのために必要とするのは、this example in your browserまたはそれに相当するApps Scriptコードのようにtypeofです。

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の詳細を忘れてしまいました。リフレッシュしてくれてありがとう。 –

関連する問題