2015-07-11 83 views
8

最近,在Developer Tool中使用JavaScript,我發現了一個奇怪的特性。鉻接受與運算符(加,減號)和運營商開括號之間的任何代碼右括號並執行它,就像這樣: enter image description hereChrome開發工具中JavaScript的奇怪行爲

我沒有找到在其他瀏覽器中這種行爲,只是在Chrome中。

也許這是一個功能,但它爲什麼以及如何工作,它可以成爲JavaScript引擎的問題嗎?

+0

我喜歡你如何稱它爲功能而不是bug –

+1

我寫了一篇關於它的文章:https://medium.com/@asaskevich/how-does-chrome-executes-scripts-inside-developer- tool-59a5ea8f7de2 –

回答

7

這是Chrome的方式評估你的輸入:

with (typeof __commandLineAPI !== 'undefined' ? __commandLineAPI : { __proto__: null }) { 
// your code here... 
} 

所以一旦你輸入}{ 成爲

with (typeof __commandLineAPI !== 'undefined' ? __commandLineAPI : { __proto__: null }) {}{} // indefined 

下一頁輸入}-+{ 成爲

undefined -+ {} // NaN 

等等上。

+0

注意:該對象被稱爲'__commandLineAPI',而不是'commandLineAPI'。另外值得注意的是,這個對象表示Chrome [命令行API](https://developer.chrome.com/devtools/docs/commandline-api)。 –

+0

@gxoptg肯定,似乎是redactor如何解析我的代碼的結果;) –

4

這是因爲Chrome的包裹在控制檯下面的施工輸入代碼:

with (typeof __commandLineAPI !== 'undefined' ? __commandLineAPI : { __proto__: null }) { 
    // Your code 
} 

所以,當你輸入類似} 10 {,代碼的計算結果爲:

with (typeof __commandLineAPI !== 'undefined' ? __commandLineAPI : { __proto__: null }) { 
    } 10 { 
} 

這是空的with塊,一個數字和空的結構塊。

__commandLineAPI是包含Chrome Command Line API的內部對象。