現在我要在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來說的,請自行舉一反三)
等號代表賦值,賦值算一條語句,大括號中如果是一條語句,編譯器就會把它當做語句塊;冒號算聲明,大括號如果是聲明,編譯器就會把它當做一個對象。
最後,總結完畢,因爲我自己也老是愛把這兩個搞混,總是要等到編譯器提示才改,經過這次總結,應該以後就不會再寫錯了。