我想检查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');
}
记录这两条消息:
"a" is not a String
String("b") is not a String
文档对于支持的ECMAScript子集并不清楚,尽管显然instanceof是一个有效的运算符而String是一个有效的类型,从这个事实判断 代码执行无异常。
检查变量类型的适当方法是什么?
答案 0 :(得分:7)
这是标准的EcmaScript 3.
您的代码正在执行JavaScript期望:请参阅此处equivalent JavaScript running in your browser。
Instanceof检查原型链中的匹配构造函数。这对于通过'new'创建的对象很有用,但对字符串不是很有帮助。你真正想要的String是typeof,如this example in your browser或等效的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');
}