Javascript相等比较不起作用

Javascript相等比较不起作用,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,有人能解释为什么这行代码是Logger.log(“%s等于%s”,col1[i],col2[i])从未被调用?我是Javascript新手,但基于此,我在if语句中使用了正确的运算符进行比较。这些值保证为整数或空单元格(如果有区别的话) function SetFilter(){ var first_row_to_hide=4; var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var maxrow

有人能解释为什么这行代码是Logger.log(“%s等于%s”,col1[i],col2[i])从未被调用?我是Javascript新手,但基于此,我在
if
语句中使用了正确的运算符进行比较。这些值保证为整数或空单元格(如果有区别的话)

function SetFilter(){
  var first_row_to_hide=4;
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var maxrows=sheet.getMaxRows();
  col1 = sheet.getRange(first_row_to_hide,3,maxrows,1).getValues();//getRange(row, column, numRows, numColumns) -- column: C
  col2 = sheet.getRange(first_row_to_hide,4,maxrows,1).getValues();//column: D
  for (var i = 1; i < col1.length; i++){
    Logger.log("%s ? %s",col1[i],col2[i]);
    if (col1[i] === col2[i]){
     Logger.log("%s EQUALS %s",col1[i],col2[i]); 
    }//sheet.hideRows(i+first_row_to_hide);
  }
  Logger.log("DONE");
}

您使用的是严格比较
==
,只有当操作数类型相同且内容相同时(涉及对象时,它们必须引用完全相同的对象),这才是真的

而抽象比较
=
在比较之前将操作数转换为相同的类型

可能
col1[i]
col2[i]
违反上述条件之一。(如果它们是对象,
=
也将返回false,除非它们引用相同的对象)

“setValues()”具有二维数组。因此,您的脚本通过更改

发件人:

if (col1[i] === col2[i]){
 Logger.log("%s EQUALS %s",col1[i],col2[i]); 
}//sheet.hideRows(i+first_row_to_hide);
致:


“有人能解释为什么从来没有调用过该行吗?”~是的,因为
col1[i]
col2[i]
从来都不是
%s]记录的内容%s
?请将
col1[i]
col2[i]
的值相加。此外,严格相等运算符需要两个操作数的类型相同。添加到@Agalo的注释中,如果它们是对象,则它们必须是完全相同的对象引用。如果您只想比较“setValues()”检索到的数据是二维数组,那么可以尝试
col1[i]==col2[i]
。将col1[i]==col2[i]更改为col1[i][0]==col2[i][0]怎么样?这是有道理的,但它们都是整数列(请参见上面更新的示例)。我可能遗漏了什么,或者我误解了你吗?有点旁注,但听起来很奇怪,javascript技术上没有整数——类型会显示为“number”。您可以使用“typeof”运算符检查变量的类型。看起来你已经在上面的评论中解决了但检查类型有助于防止将来出现这种混淆。
if (col1[i] === col2[i]){
 Logger.log("%s EQUALS %s",col1[i],col2[i]); 
}//sheet.hideRows(i+first_row_to_hide);
if (col1[i][0] === col2[i][0]){
 Logger.log("%s EQUALS %s",col1[i],col2[i]); 
}//sheet.hideRows(i+first_row_to_hide);