2013-03-23 41 views
1

我試圖使該組織從谷歌張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://stackoverflow.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

回答

1

它看起來像你比較兩個數組對象,而不是兩個字符串。截圖聲稱名稱和員工是具有單個元素的索引數組。

爲每個數組對象中的字符串數據比較:

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

0
> 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]) 
0

使用toString方法可能會有所幫助:

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

但其他建議看起來更乾淨。

0

在調試器,你可以看到,無論nameemployee是指在一個字符串到數組 - 但這些是兩個不同的陣列(具有不同的內部IDS),這是因此不能在==方面相等。

如果要比較它們內部的字符串,請使用

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