JavaScript詭異的大括號

現在我要在JavaScript中創建一個對象,我可以:

let obj = new Object();

我想偷懶一點,我還可以:

let obj = new Object;

我覺得我還可以再懶一點:

let obj = {};

由此可見在上面的例子中大括號的作用與new Object()是一致的。
然後我還能這樣寫,創建一個帶有屬性的對象,儘管它不被任何引用所引用。
例1:

{
	name : 'xiaoming'
}

如果單單是這樣,大括號一點也不詭異,不過就只有這些了嗎?當然不是。請繼續往下面看:
例2:

{
	//按道理來說,這裏我不應該缺少var等標識符,但是這樣是爲了對比效果,請見諒
	name = 'xiaoming'
}

例1和例2只有一點地方不同,但是這個不同的地方,讓兩段代碼完全就是兩個意思了。
例1是創建一個對象,並給這個對象聲明瞭name屬性,再給這個屬性賦值xiaoming;
而列2則是一個包含一條語句的語句塊;
例1是可以賦值的:

var people = {
	name : 'xiaoming'
}

要是拿例2來賦值呢?

var people = {
	//按道理來說,這裏我不應該缺少var等標識符,但是這樣是爲了對比效果,請見諒
	name = 'xiaoming'
}

'Invalid shorthand property initializer’相信應該都見過吧。
例1還可以返回:

function func(){
	return {
		name : 'xiaoming'
	}
}
func();

要是拿例2來返回呢?

function func(){
	return {
		//按道理來說,這裏我不應該缺少var等標識符,但是這樣是爲了對比效果,請見諒
		name = 'xiaoming'
	}
}
func();

還是會報"‘Invalid shorthand property initializer’"
爲什麼會這樣呢?(下面的話只是針對例1、例2來說的,請自行舉一反三)
等號代表賦值,賦值算一條語句,大括號中如果是一條語句,編譯器就會把它當做語句塊冒號算聲明,大括號如果是聲明,編譯器就會把它當做一個對象。

最後,總結完畢,因爲我自己也老是愛把這兩個搞混,總是要等到編譯器提示才改,經過這次總結,應該以後就不會再寫錯了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章