'{ }'在差别高低文中的作用

大括号‘{ }’的作用,在差异的高低文中差异很大!以下看法如有毛病,请先辈实时指出!

一、{ }被当作对象字面量

如:var obj = { foo: function(){} };,外层的{…}被赋值给了obj,这里的{…}被当作对象处置惩罚。

  1. 在{ }的前面有运算符出现时,都会被当作对象处置惩罚,如:"" + {}var a = {x:1};

  2. 在{ }的表面包裹( )时,也被当对象处置惩罚,如( {a:1} ),而( { var a = 1; } )不符合对象定义的语法,会提醒语法毛病

二、{ }被当作代码块

除了以上被当作对象处置惩罚的状况,别的基础会被当作代码块处置惩罚

1.自力的代码块{…}

如:
当去掉var obj = { foo: function(){...} };中的声明赋值部份,只留下{ foo: function(){...} };,此时,{…}示意一个代码块,代码块内的foo: function(){...}将被视为标签语句(能够经由过程运用break foo;跳过被标记的代码块实行以后的语句,而在轮回中能够用continue label;跳过被标记的轮回体的本次轮回,继承下一次轮回,用break label;跳出被标记的轮回体)

再如:

[] + {}; //"[object Object]"
{} + []; //0 

第一句简朴,{}被当作空对象处置惩罚,现实盘算的是"" + [object Object]
第二句中,{}前面没有运算符,也没有别的任何润饰,被当作空的代码块了,现实盘算的是+[]

2.函数体

如:function foo() {…}

3.for、while、if、switch等语句的主体

如:for(var i = 0; i < 5; i++){...}

var a = {x:1,y:2};
if(a.x == 1){
    ...
}else if(a.y == 2){
    ...
}else{
    ...
}

实在JavaScript并没有else if语句,假如if、else语句背面只要单个语句时能够省略{ },所以else if(...){...}else{...},严厉来说应该是如许else { if(...){...}else{...} }

三、解构赋值

ES6中新增的语法,如:var {a,b} = {a:1,b:2}; 相当于:

var obj = {a:1,b:2};
var a = obj.a;
var b = obj.b;

解构赋值也能够用于函数定名参数中:

function foo({a,b}){
    console.log(a,b);
}
foo( {a:1,b:2} )

四、JSON对象

虽然说JSON是JavaScript言语的一个子集,然则JSON自身并非正当的JavaScript语法,如:
{ "a": 1}不符合对象定义的语法,也不符合标签的语法(不允许有””),在各浏览器控制台输入它,表现各不相同,大部份抛出SyntaxError,Chrome则把它转换为对象了。
此时能够经由过程JSON-P,JSON-P能经由过程将JSON数据封装为函数挪用,如foo({ "a": 1}),从而将JSON转换为正当的JavaScript语法。

本文参考《你不知道的JavaScript》

    原文作者:苏福
    原文地址: https://segmentfault.com/a/1190000007063788
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞