最近,在Developer Tool中使用JavaScript,我發現了一個奇怪的特性。鉻接受與運算符(加,減號)和運營商開括號之間的任何代碼右括號並執行它,就像這樣: Chrome開發工具中JavaScript的奇怪行爲
我沒有找到在其他瀏覽器中這種行爲,只是在Chrome中。
也許這是一個功能,但它爲什麼以及如何工作,它可以成爲JavaScript引擎的問題嗎?
最近,在Developer Tool中使用JavaScript,我發現了一個奇怪的特性。鉻接受與運算符(加,減號)和運營商開括號之間的任何代碼右括號並執行它,就像這樣: Chrome開發工具中JavaScript的奇怪行爲
我沒有找到在其他瀏覽器中這種行爲,只是在Chrome中。
也許這是一個功能,但它爲什麼以及如何工作,它可以成爲JavaScript引擎的問題嗎?
這是Chrome的方式評估你的輸入:
with (typeof __commandLineAPI !== 'undefined' ? __commandLineAPI : { __proto__: null }) {
// your code here...
}
所以一旦你輸入}{
成爲
with (typeof __commandLineAPI !== 'undefined' ? __commandLineAPI : { __proto__: null }) {}{} // indefined
下一頁輸入}-+{
成爲
undefined -+ {} // NaN
等等上。
注意:該對象被稱爲'__commandLineAPI',而不是'commandLineAPI'。另外值得注意的是,這個對象表示Chrome [命令行API](https://developer.chrome.com/devtools/docs/commandline-api)。 –
@gxoptg肯定,似乎是redactor如何解析我的代碼的結果;) –
這是因爲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的內部對象。
我喜歡你如何稱它爲功能而不是bug –
我寫了一篇關於它的文章:https://medium.com/@asaskevich/how-does-chrome-executes-scripts-inside-developer- tool-59a5ea8f7de2 –