【发布时间】:2023-03-06 04:33:01
【问题描述】:
当我注意到这个有趣的细节时,我正在使用 Google Apps Script API,如下面的代码所述
function testEmptyRange() {
var range = SpreadsheetApp.getActive().getSheetByName("Sheet1").getDataRange();
var values = range.getValues();
Logger.log(values.length + " " + values[0].length);
Logger.log((values[0][0] == "") + " " + typeof values[0][0]);
Logger.log((values[0] == "") + " " + typeof values[0]);
Logger.log((values == "") + " " + typeof values);
}
如果Sheet1 没有任何内容,则values 是1-by-1 2D array of Objects,实际上是一个包含空字符串的单元格。真正让我吃惊的是,both values 和 values[0],类型为object,也等于空字符串。上述函数产生的日志是
[17-03-05 00:43:46:807 EST] 1 1
[17-03-05 00:43:46:807 EST] true string
[17-03-05 00:43:46:808 EST] true object
[17-03-05 00:43:46:808 EST] true object
我想解释一下为什么会这样。一个对象怎么可能等于空字符串?我意识到运算符== 与运算符=== 不同,如果我用后者替换前者,那么日志显示values 和values[0] 的false,这是更多我想,按照预期的行为。但这并不能解释为什么或如何在第一种情况下对象可以等于空字符串,我想了解这里发生了什么。
【问题讨论】:
-
Javascript 有automatic type conversion。这是一个可爱的功能,它允许一些聪明的行为,但这也意味着当你不知道会发生什么时,你可能会遇到麻烦。这对于相等比较来说尤其令人困惑,这就是为什么不鼓励
==比较而支持严格的===比较,这不允许任何自动类型转换。至于你的场景,即使有类型转换{} == ''也应该是false;你确定不是[] == ''?
标签: javascript google-apps-script