我们平时定义js对象的时候,一般都是这样写的:
var a = {
name:”张三”,
getName:function(){
console.log(this.name);
}
}
然后就可以直接使用了:a.name、a.getName()
如果我要在定义这个对象的同时去使用这个对象会怎么样呢?比如说:
{
name:”张三”,
getName:function(){
console.log(this.name);
}
}.getName()
结果报错:UncaughtSyntaxError: Unexpected token :
为什么呢?这是因为在js中“语句优先”在作怪,js中的 {} 有三种含义:
1语句块;2函数;3对象
如果不做任何说明,语句块是最优先的,所以js解释器会把上面代码 {} 中的部分理解为代码块,而不是对象。如果要让js将其解析为一个对象,可以把它赋给一个变量,就好像一开始所写的那样。另外,也可以这样做:用圆括号 () 将 {} 括起来,强制转为对象,就像这样 ({})
({
name:”张三”,
getName:function(){
console.log(this.name);
}
}).getName()
如果不考虑方法的返回值,还可以在 {} 前面加上这些运算符 “!“ ”~“”+“ ”-“(目前我只发现这些有用,可能还有别的),例如 !{}、~{}、+{}、-{}
当然,这其实并没有什么卵用,真正写代码的时候,直接赋给一个变量保存这个对象就好了