现在我要在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来说的,请自行举一反三)
等号代表赋值,赋值算一条语句,大括号中如果是一条语句,编译器就会把它当做语句块;冒号算声明,大括号如果是声明,编译器就会把它当做一个对象。
最后,总结完毕,因为我自己也老是爱把这两个搞混,总是要等到编译器提示才改,经过这次总结,应该以后就不会再写错了。