> "[object Number]" === Object.prototype.toString.call(1) // #1
< true
> "[object Number]" === {}.toString.call(1) // #2
< true
> {}.toString.call(1) === "[object Number]" // #3
< SyntaxError: Unexpected token '.'
> ({}).toString.call(1) === "[object Number]" // #4
< true
> {}.toString.call(1) // #5
< SyntaxError: Unexpected token '.'
> !{}.toString.call(1) // #6
< false
> test = {}.toString.call(1) // #7
< "[object Number]"
正如您從示例中看到的,#2和#3幾乎完全相同,只是它們交換了左側和右側。 #2工作正常,但#3給出了語法錯誤。爲了讓#3工作,需要一對括號。此外,從#5-7我們可以看出,只要{}
不在最左邊,它就可以正常工作。直接訪問空對象上的屬性時出現語法錯誤{}
但是爲什麼?
我猜'''''是一個對象字面量,並沒有分配給任何變量,因此它不被初始化爲對象。考慮到{{}}作用域的可能性 – Rajesh
在這種情況下{}是一個塊。 – Xufox
@Xufox:爲什麼它是一個塊?如果您在控制檯中鍵入「{}」,則會返回「{}」 - 一個對象。此外,這是在桌面瀏覽器上測試的,而不是在節點上測試的 – edward