[英]Define variables with “{}object”, unexpected TypeError
如果{}object
,例如{}"string"
, {}[1, 2, 3]
或{}({})
完全等於(根據===
) object
,例如"string"
, [1, 2, 3]
或({})
,為什么可以用后者而不是前者定義變量?
澄清:
{}"string" === "string" // true
var a = "string" // No error
var a = {}"string" // SyntaxError: Unexpected string
var a = ({}"string") // SyntaxError: Unexpected string
var a = {}("string") // TypeError: object is not a function
var a = ({}("string")) // TypeError: object is not a function
在這種情況下, {}
似乎表現得像一個空塊,而不是對象文字。 因此,在語法上將其視為:
// Valid syntax...
// despite confusing whitespace...
for (var i=0;i<5;i++) {}"string" === "string";
但是,該空塊不能在賦值的右側使用,例如
var a = {}"string"; //SyntaxError
在這里, {}()
表示{}
被用作函數,並且參數()
var a = {}("string") // TypeError: object is not a function
在Javascript中,就像在C ++中一樣,您可以在程序中任意放置代碼塊。 由於Javascript不像C ++那樣具有塊作用域,因此在Javascript中這基本上是沒有用的。
這是一個非空代碼塊的示例:
{
//this is a code block
var a = 1;
var b = a + 1;
}
alert(a); // 1
alert(b); // 2
請注意, 這些孤獨的代碼塊不是表達式 ,因此不可能將它們放在語句中。 這解釋了為什么var a = {}"string"
及其在語句內的其他用法在語法上無效。
{}"string" === "string"
在控制台中返回true
,因為{}
是一個空的代碼塊,將被忽略,其后是"string" === "string"
,這顯然是true
。 如果使用這樣的空格,則代碼會更清晰:
{
//empty code block
}
"string" === "string"
在表達式內部, {}
被解釋為對象文字。 如果您嘗試使用類似{}()
,它將抱怨{}
不是函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.