參見here;javascript,對象邏輯和對象,語法錯誤?
代碼示例
eval("true && {a:1} && {b:2} && alert('this is ok');")
eval("{a:1} && {b:2} && alert('this should be ok~~');")
EVAL跳過語法錯誤。
我缺少什麼?
測試:
29.0.1547.76米的win7
IE9
參見here;javascript,對象邏輯和對象,語法錯誤?
代碼示例
eval("true && {a:1} && {b:2} && alert('this is ok');")
eval("{a:1} && {b:2} && alert('this should be ok~~');")
EVAL跳過語法錯誤。
我缺少什麼?
測試:
29.0.1547.76米的win7
IE9
{a:1}
具有在Javascript
x = {a:1}
)while(x) {a:1}
)具體的解釋取決於解析器遇到開口時的狀態{
。在「聲明」狀態{a:1}
將是一個塊,處於「表達」狀態 - 文字。由於解析總是從語句狀態開始,所以{a:1} && x
將被讀爲block && expression
,這是一個語法錯誤。相反,在x && {a:1}
,&&
強制解析器處於「表達式」狀態,並且{a:1}
將是文字(無錯誤)。
爲了確保{a:1}
始終是一個文字,請在其之前放置一個操作符或大括號以使其成爲表達式,例如, +{a:1}
,!!{a:1}
,({a:1})
等
的問題是,該第二串具有{
,將其作爲一個塊的開始,而不是對象文本的開頭開始。試試這個:
eval("({a:1}) && {b:2} && alert('this should be ok~~');")
通過在第一個對象周圍加上括號,它不會被解釋爲一段代碼的開始。 (第二個對象,{b:2}
是可以的,因爲它的&&
後出現因此在該點的解釋是,不能指望塊。)
請注意,這並不是因爲你使用eval()
:如果您把你的字符串的內容直接放在你的腳本中你會遇到同樣的問題。