2015-05-01 101 views
1

奇怪的真相測試結果爲什麼這個分號導致不正確falsey結果

filter = /rob/gi 
>> /rob/gi 
filter.test('hey') 
>> false 
filter.test('rob') 
>> true 
true && filter.test('rob'); 
>> false 
true && filter.test('rob') ; 
>> true 
(true && filter.test('rob')); 
>> false 
(true && filter.test('rob')) ; 
>> true 

在Firefox和Chrome

+1

刪除'g'標誌,一切都按預期工作。 –

+0

沒有理由在'.test()'中使用'g'標誌。 – jfriend00

+2

它與分號無關。多次重複相同的測試,你會看到相同的行爲。 – Barmar

回答

4

這是因爲.test表現爲.exec()和電話

之間保持狀態(位置)重現

與exec()(或與其組合)一樣,在同一個全局正則表達式實例上調用多次的test()將超過先前的匹配。

因此,對於'rob'輸入它匹配它。然後在第二次調用時,它會嘗試匹配第一次匹配後剩下的任何內容:它是一個空字符串,因此它失敗並倒帶。

要看到它在行動嘗試匹配'robrobrob' - 將有3 true其次是false

參考文獻:

UPD

  • 在這個特殊的情況下,它是因爲你用g修改(學分Barmar
+1

你應該提一下,這是因爲'g'修飾符。 – Barmar

相關問題