instanceof String在Google Apps脚本中的行为不符合预期

Jam*_*nge 7 google-apps-script

我想检查一下Apps脚本中的变量是否是一个String,但发现当变量实际上是一个字符串时,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');
}
Run Code Online (Sandbox Code Playgroud)

记录这两条消息:

"a" is not a String
String("b") is not a String
Run Code Online (Sandbox Code Playgroud)

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

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

Cor*_*y G 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');
}
Run Code Online (Sandbox Code Playgroud)