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来说的,请自行举一反三)
等号代表赋值,赋值算一条语句,大括号中如果是一条语句,编译器就会把它当做语句块冒号算声明,大括号如果是声明,编译器就会把它当做一个对象。

最后,总结完毕,因为我自己也老是爱把这两个搞混,总是要等到编译器提示才改,经过这次总结,应该以后就不会再写错了。

猜你喜欢

转载自blog.csdn.net/qq_35508835/article/details/106298981
今日推荐