if语句,即使失败,当变量匹配

问题描述:

我试图使该组织从谷歌张RFID扫描器冲插件程序...if语句,即使失败,当变量匹配

当我去匹配扫描[I]与员工姓名[ j]它永远不会成功。

我有一个简单的if语句:

//names[i] is the name of the card for the scan event (card names = employee full name) 
var name = names[i]; 

//the j for loop will check all employee names in the list for a match 
var employee = employees[j]; 
if (name==employee) { 
    var ifsuccess = true; 
} 

但我从来没有ifsuccess到=真...这可能是显而易见的,但我从来没有这样做之前,谷歌脚本编程(或javascript:P)不任何人都知道我做错了什么?

screenshot

+1

也许你是由JavaScript平等善良咬伤:http://*.com/questions/359494/javascript-vs-does-it -matter-which-equal-operator-i-use name ===员工可能会诀窍 – rene 2013-03-23 18:03:11

+2

@rene如果'a == b'永远不会成功,那么是什么让你认为'a === b',更具体有条件的,会做得更好吗? – 2013-03-23 18:07:31

+0

@rene平等永远是真理 - ===的真实情况对于==总是如此。 – Barney 2013-03-23 18:09:09

它看起来像你比较两个数组对象,而不是两个字符串。截图声称名称和员工是具有单个元素的索引数组。

为每个数组对象中的字符串数据比较:

name[0] == employee[0]  // equal value 

或者稍微更安全:

name[0] === employee[0] // equal value and of the same type 
+0

这似乎已经做到了!太感谢了!最初我的名字是[i] == employees [j] ...为什么数组[i]返回另一个数组? – user2202843 2013-03-23 18:10:15

+0

因为名称和员工是数组的数组。名称和员工中的每个数组元素都是具有单个元素(字符串)的数组。换句话说,它们是字符串数组的数组,而不是字符串数组,您可能通常会期望。 – 2013-03-23 18:15:34

> foo = ['foo']; 
[ 'foo' ] 
> bar = ['foo']; 
[ 'foo' ] 
> foo == bar 
false 
> foo === bar 
false 

比较阵列,即使他们看起来是一样的基于阵列,不会除非它们确实在内存中引用相同的数组,否则为真。

> bar = foo; 
[ 'foo' ] 
> foo == bar 
true 
> foo === bar 
true 

所以,尽量而是比较字符串:

if (bar[0] === foo[0]) 

使用toString方法可能会有所帮助:

name.toString()==employee.toString() 

但其他建议看起来更干净。

在调试器,你可以看到,无论nameemployee是指在一个字符串到数组 - 但这些是两个不同的阵列(具有不同的内部IDS),这是因此不能在==方面相等。

如果要比较它们内部的字符串,请使用

var ifsuccess = name[0] == employee[0];