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延时重复执行函数 lLoopRun.js
Jun 29 Javascript
Javascript 汉字字节判断
Aug 01 Javascript
JavaScript控制Session操作方法
Jan 17 Javascript
javascript抽象工厂模式详细说明
Dec 16 Javascript
JavaScript使用DeviceOne开发实战(四)仿优酷视频应用
Dec 02 Javascript
JavaScript的兼容性与调试技巧
Nov 22 Javascript
js多个物体运动功能实例分析
Dec 20 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
Jun 21 Javascript
js数组实现权重概率分配
Sep 12 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
Dec 21 Javascript
浅谈React碰到v-if
Nov 04 Javascript
javascript 原型与原型链的理解及实例分析
Nov 23 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
使用php记录用户通过搜索引擎进网站的关键词
2014/02/13 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
2019/10/24 PHP
jquery实现图片滚动效果的简单实例
2013/11/23 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
2015/01/23 Javascript
javascript设计模式--策略模式之输入验证
2015/11/27 Javascript
AngularJS基础 ng-non-bindable 指令详细介绍
2016/08/02 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
json定义及jquery操作json的方法
2016/09/29 Javascript
jQuery插件扩展操作入门示例
2017/01/16 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
详解通过JSON数据使用VUE.JS
2017/05/26 Javascript
angularjs实现天气预报功能
2020/06/16 Javascript
Angular整合zTree的示例代码
2018/01/24 Javascript
JS实现模糊查询带下拉匹配效果
2018/06/21 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
2018/10/19 Javascript
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
Vue+Koa2+mongoose写一个像素绘板的实现方法
2019/09/10 Javascript
Python爬取APP下载链接的实现方法
2016/09/30 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
更改Python的pip install 默认安装依赖路径方法详解
2018/10/27 Python
python实现彩色图转换成灰度图
2019/01/15 Python
对Python中的条件判断、循环以及循环的终止方法详解
2019/02/08 Python
python 使用socket传输图片视频等文件的实现方式
2019/08/07 Python
python多线程并发及测试框架案例
2019/10/15 Python
波兰汽车配件网上商店:iParts.pl
2020/09/08 全球购物
会计助理的岗位职责
2013/11/29 职场文书
七年级生物教学反思
2014/01/30 职场文书
2014年三八妇女节活动方案
2014/02/28 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
2014年妇女工作总结
2014/12/06 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
Nginx下配置Https证书详细过程
2021/04/01 Servers
OpenCV 图像梯度的实现方法
2021/07/25 Python