7

Apps Script の変数が文字列かどうかを確認したかったのですが、変数が実際には文字列であるのに、instanceof が true を返さないことがわかりました。次のテスト:

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 つのメッセージをログに記録します。

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

サポートされている ECMAScript のサブセットに関するドキュメントは明確ではありませんが、コードが例外なく実行されたという事実から判断すると、明らかに instanceof は有効な演算子であり、String は有効な型です。

変数の型を確認する適切な方法は何ですか?

4

1 に答える 1

7

標準の EcmaScript 3 です。

あなたのコードは、JavaScript が期待することを行っています。ブラウザで実行されている同等の JavaScriptについては、こちらを参照してください。

Instanceof は、プロトタイプ チェーン内の一致するコンストラクターをチェックします。これは、「new」で作成されたオブジェクトには適していますが、文字列にはあまり役に立ちません。String に実際に必要なのは typeof です。これは、ブラウザのこの例または同等の Apps Script コードに示されています。

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');
}
于 2012-07-20T02:24:46.437 に答える