2014-03-07 65 views
1

如果沒有匹配,則將變量賦值爲null,如果匹配,則將第二個匹配賦值給該變量。無法讀取null的屬性'1'。變量設置

這就是我以爲會這樣,但是當它返回null時,它仍然會檢查代碼的其餘部分是否爲false。所以我得到一個Uncaught TypeError: Cannot read property '1' of null

我該如何解決這部分問題,使其工作而不給我一個錯誤?

var matches = $("#search input").val().match(pattern);  
var id = []; 
id["new"] = (typeof matches === null) ? null : matches[1]; // <-- 
+0

檢查如果匹配首先有值 – Rex

回答

1

typeof運算符總是返回一個永遠不會=== null的字符串。

由於$("#search input").val().match(pattern)的結果總是null沒事的時候匹配,匹配時的陣列,null是falsy值,所以你可能只是做:

id["new"] = matches ? matches[1] :null; 

甚至:

id["new"] = matches && matches[1]; 
+0

謝謝。第二段代碼發生了什麼?它有效,但我很好奇那裏發生了什麼,因爲我不明白。 –

+1

@KidDiamond如果'A'爲真值,則A && B'返回'B',否則返回'A'。因爲當匹配不匹配時'matches'爲空,並且在這種情況下你希望爲null,所以代碼可能就是這樣。 – xdazz

+0

你的第一個人是不是錯誤的方式?如果'匹配'是真的,你會'空'出來...... – Chris

0

試試這個:

id["new"] = (matches == null) ? null : matches[1]; 

.match()回報null如果沒有找到匹配。