7

我想检查 Apps 脚本中的变量是否是字符串,但发现当变量实际上是字符串时 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');
}

记录这两条消息:

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

文档不清楚支持的 ECMAScript 子集,尽管从代码执行没有异常的事实来看,instanceof 显然是一个有效的运算符,而 String 是一个有效的类型。

检查变量类型的适当方法是什么?

4

1 回答 1

7

这是标准的 EcmaScript 3。

您的代码正在执行 JavaScript 所期望的操作:请参阅此处了解在您的浏览器中运行的等效 JavaScript

Instanceof 检查原型链中的匹配构造函数。这对于通过“新”创建的对象很有用,但对字符串不是很有帮助。您真正想要的 String 是 typeof,如浏览器中的此示例或等效的 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');
}
于 2012-07-20T02:24:46.437 回答