在谷歌Chrome瀏覽器的控制檯,當我們輸入爲什麼谷歌瀏覽器的控制檯拋出「語法錯誤:意外的令牌}」輸入時(
(
並回車,瀏覽器顯示「語法錯誤:意外的令牌}」?爲什麼輸入只是「(」,不包括 「}」。
我們得到了同樣的錯誤,當我們輸入
console.log(
有沒有 「}」!
下一個標記應該是參數列表或「)」,因此錯誤消息應該是「預期參數列表」或「未關閉(」或其他)。
我想知道,控制檯輸入解析爲StatementList(opt)
(在ECMA-262中定義)?
在谷歌Chrome瀏覽器的控制檯,當我們輸入爲什麼谷歌瀏覽器的控制檯拋出「語法錯誤:意外的令牌}」輸入時(
(
並回車,瀏覽器顯示「語法錯誤:意外的令牌}」?爲什麼輸入只是「(」,不包括 「}」。
我們得到了同樣的錯誤,當我們輸入
console.log(
有沒有 「}」!
下一個標記應該是參數列表或「)」,因此錯誤消息應該是「預期參數列表」或「未關閉(」或其他)。
我想知道,控制檯輸入解析爲StatementList(opt)
(在ECMA-262中定義)?
編輯:我找到了得到評估的確切代碼。代碼位於「src/third_party/WebKit/Source/WebCore/inspector/InjectedScriptSource.js」中。
在Chrome控制檯評估您的代碼之前,它會將其封裝在with
塊中,以將命令行功能納入範圍。所以你輸入的內容實際上是在大括號內進行評估。意外的「}」令牌是由Chrome自動加入的。
是Chrome的傳遞給eval
的代碼是
with ((window && window.console && window.console._commandLineAPI) || {}) {
<your code here>
};
因爲它是一個簡單的文本替換,將下面的示例,結果是一個對象,你可以擴展到看到answer
屬性:
} 0, { answer: 42
哪個(重新格式化)等效於:
with ((window && window.console && window.console._commandLineAPI) || {}) {
}
0, { answer: 42 };
}
開頭關閉with
區塊。 0,
部分是強制對象文字被解析爲表達式而不是另一個塊所必需的。然後,{ answer: 42
是被插入的}
令牌關閉的對象字面值的開始。
對於更多的樂趣,這裏有一些工作的其他投入(及其結果):
> }{ // an empty block, so no value
undefined
> }!{ // !{} === false
false
> }!!{ // !!{} === true
true
> } +{ valueOf: function() { return 123; }
123
+1是什麼總結聰明的SQL注入與Javascript ;-)那' 0' *是*最好奇的... – Cameron 2011-04-09 05:31:34
感謝您的快速響應。嗯...這非常棘手... 所以Chrome似乎解析''{'+ text +'}''。我試過 '}; '10'+ {' 並獲得''10 [object Object]「,這與Firefox的結果相同。 – itchyny 2011-04-09 05:35:17
哇!大!我看到InjectedScriptSource.js第280行找到你正在說的話!非常感謝你! – itchyny 2011-04-09 07:27:13
護理張貼一些拋出所述錯誤的代碼? – Seth 2011-04-09 04:36:27
@Seth:他做到了,只是不容易看到。 – BoltClock 2011-04-09 04:38:01
相關:http://stackoverflow.com/questions/11989226/why-does-result-in-false-in-a-javascript-console – 2012-12-20 13:21:57