javascript的 {} 语句块详解


Posted in Javascript onFebruary 27, 2016

今日学习解析json字符串,用到了一个eval()方法,解析字符串的时候为什么需要加上括号呢?摸不着头脑。原来javascript中{}语句块具有二义性,不加括号会出错,理解这种二义性对我们理解javascript代码有极大帮助。

一、{}语句块的两个含义

表示语句块

a. 在javascript中可以使用{}来括起代码,在编辑器中方便管理代码。因为javascript并没有块级作用域,所以这种写法是无害的。

{
//some code...
}

b. 在javascript中 ,条件判断语句,循环语句,函数都需要{}语句块来整合代码

对象字面量

var box = {
  name:'kuoaho',
  age:21 
}

//此时[code]作为表达式,可以赋值给一个变量
//其实对象字面量就是可以生成对象值的表达式

二、那如果对象字面量不作为一个赋值表达式,会发生什么情况呢?

example:

{name:'kuoao'}    //没有报错,但是也没有创建对象
  {name:'kuohao',age}  //报错

由上面可以看出对象字面量只能够作为表达式赋值,第一种写法没有错,只是javascript将它作为一个label语句解析了。

analysis:

{name:'kuoao'}

    //{}一个语句块
   // name:'kuohao',一个label语句,用于标记for循环

三、但是问题又来了……

{
name:'kuohao',
age:21
}

//这样为什么会报错?这不是对象字面量的写法吗?
因为javascript中{}的二义性,{}不仅仅被认为是对象字面量而且还会被认为是代码块。

analysis:
  {
  name:'kuohao',
  age:21
  }

一个代码块,两条label语句,如果没有逗号,是完全没有问题的,所以关键在于逗号,两条语句的分隔应该使用分号,所以javascript会判定这是语法错误

四、正确的写法

({
  name:'kuohao',
  age:21
  })

  //正确的写法

()会把语句转换成表达式,称为语句表达式,对象字面量不是表达式吗?为什么还需要()来转换?

加上括号以后,就可以消除这种二义性,因为括号里的代码都会被转换为表达式求值并且返回,因此语句块也就变成了对象字面量,也可以得出,对象字面量必须作为表达式而存在

Javascript 相关文章推荐
javascript中字符串拼接详解
Sep 26 Javascript
js与C#进行时间戳转换
Nov 14 Javascript
jQuery中trigger()方法用法实例
Jan 19 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
Nov 18 Javascript
基于javascript代码实现通过点击图片显示原图片
Nov 29 Javascript
轻松搞定js表单验证
Oct 13 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
Mar 15 Javascript
npm国内镜像 安装失败的几种解决方案
Jun 04 Javascript
Vue.js常用指令之循环使用v-for指令教程
Jun 27 Javascript
原生JS实现列表子元素顺序反转的方法分析
Jul 02 Javascript
微信小程序实现页面浮动导航
Jan 28 Javascript
Element ui 下拉多选时新增一个选择所有的选项
Aug 21 Javascript
javascript中eval解析JSON字符串
Feb 27 #Javascript
javascript先序遍历DOM树的方法
Feb 27 #Javascript
JavaScript开发者必备的10个Sublime Text插件
Feb 27 #Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
Feb 27 #Javascript
JS原型、原型链深入理解
Feb 27 #Javascript
Javascript中Date类型和Math类型详解
Feb 27 #Javascript
原生javascript实现匀速运动动画效果
Feb 26 #Javascript
You might like
PHILIPS D1835/D1875的电路分析与打理
2021/03/02 无线电
PHP 批量删除 sql语句
2009/06/05 PHP
php实现用户在线时间统计详解
2011/10/08 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
PHP经典面试题集锦
2015/03/19 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
PHP高效获取远程图片尺寸和大小的实现方法
2017/10/20 PHP
短信提示使用 特效
2007/01/19 Javascript
常用的javascript function代码
2008/05/23 Javascript
自己写的兼容ie和ff的在线文本编辑器类似ewebeditor
2012/12/12 Javascript
js二维数组排序的简单示例代码
2014/01/24 Javascript
jquery操作checkbox实现全选和取消全选
2014/05/02 Javascript
JS制作适用于手机和电脑的通知信息效果
2016/10/28 Javascript
详解微信小程序开发之城市选择器 城市切换
2017/01/17 Javascript
一个可复用的vue分页组件
2017/05/15 Javascript
详解在Angular项目中添加插件ng-bootstrap
2017/07/04 Javascript
详解如何使用PM2将Node.js的集群变得更加容易
2017/11/15 Javascript
switchery按钮的使用方法
2017/12/18 Javascript
node.js到底要不要加分号浅析
2018/07/11 Javascript
Webstorm2016使用技巧(SVN插件使用)
2018/10/29 Javascript
微信小程序开发常见问题及解决方案
2019/07/11 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
.netcore+vue 实现压缩文件下载功能
2020/09/24 Javascript
vue-router路由懒加载及实现的3种方式
2021/02/28 Vue.js
python调用外部程序的实操步骤
2019/03/04 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2019/08/14 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
学习Python爬虫的几点建议
2020/08/05 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
Javascript如何发送一个Ajax请求
2015/01/26 面试题
2014县政府领导班子对照检查材料思想汇报
2014/09/25 职场文书
银行会计主管岗位职责
2014/10/01 职场文书
长征观后感
2015/06/09 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
解决使用了nginx获取IP地址都是127.0.0.1 的问题
2021/09/25 Servers