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)不任何人都知道我做错了什么?
它看起来像你比较两个数组对象,而不是两个字符串。截图声称名称和员工是具有单个元素的索引数组。
为每个数组对象中的字符串数据比较:
name[0] == employee[0] // equal value
或者稍微更安全:
name[0] === employee[0] // equal value and of the same type
这似乎已经做到了!太感谢了!最初我的名字是[i] == employees [j] ...为什么数组[i]返回另一个数组? – user2202843 2013-03-23 18:10:15
因为名称和员工是数组的数组。名称和员工中的每个数组元素都是具有单个元素(字符串)的数组。换句话说,它们是字符串数组的数组,而不是字符串数组,您可能通常会期望。 – 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()
但其他建议看起来更干净。
在调试器,你可以看到,无论name
和employee
是指在一个字符串到数组 - 但这些是两个不同的阵列(具有不同的内部IDS),这是因此不能在==
方面相等。
如果要比较它们内部的字符串,请使用
var ifsuccess = name[0] == employee[0];
也许你是由JavaScript平等善良咬伤:http://*.com/questions/359494/javascript-vs-does-it -matter-which-equal-operator-i-use name ===员工可能会诀窍 – rene 2013-03-23 18:03:11
@rene如果'a == b'永远不会成功,那么是什么让你认为'a === b',更具体有条件的,会做得更好吗? – 2013-03-23 18:07:31
@rene平等永远是真理 - ===的真实情况对于==总是如此。 – Barney 2013-03-23 18:09:09