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 hasOwnProperty 方法 & in 关键字
Nov 26 Javascript
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
Apr 25 Javascript
js各种验证文本框输入格式(正则表达式)
Oct 22 Javascript
js 判断控件获得焦点的示例代码
Mar 04 Javascript
jquery实现人性化的有选择性禁用鼠标右键
Jun 30 Javascript
JavaScript日期时间与时间戳的转换函数分享
Jan 31 Javascript
浅谈Javascript数组的使用
Jul 29 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
Jun 13 Javascript
Vue2.0+ElementUI实现表格翻页的实例
Oct 23 Javascript
Bootstrap3.3.7导航栏下拉菜单鼠标滑过展开效果
Oct 31 Javascript
vue使用swiper.js重叠轮播组建样式
Nov 14 Javascript
vue.js+element 默认提示中英文操作
Nov 11 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/10/29 PHP
PHP实现Soap通讯的方法
2014/11/03 PHP
Yii学习总结之安装配置
2015/02/22 PHP
基于PHP如何把汉字转化为拼音
2015/12/11 PHP
php反射类ReflectionClass用法分析
2016/05/12 PHP
win10下 php安装seaslog扩展的详细步骤
2020/12/04 PHP
JS 统计时间
2021/03/09 Javascript
Jquery 组合form元素为json格式,asp.net反序列化
2009/07/09 Javascript
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
KnockoutJS 3.X API 第四章之click绑定
2016/10/10 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
Javascript 判断两个IP是否在同一网段实例代码
2016/11/28 Javascript
Vue2.0子同级组件之间数据交互方法
2018/02/28 Javascript
JQuery模拟实现网页中自定义鼠标右键菜单功能
2018/11/14 jQuery
微信小程序云开发修改云数据库中的数据方法
2019/05/18 Javascript
详细讲解如何创建, 发布自己的 Vue UI 组件库
2019/05/29 Javascript
JS实现手风琴特效
2020/11/08 Javascript
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
Python常用模块用法分析
2014/09/08 Python
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
Tensorflow的可视化工具Tensorboard的初步使用详解
2018/02/11 Python
python Celery定时任务的示例
2018/03/13 Python
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
基于python实现简单C/S模式代码实例
2020/09/14 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
2021/01/12 Python
俄语专业职业生涯规划
2014/02/26 职场文书
我读书我快乐演讲稿
2014/05/07 职场文书
医生见习报告范文
2014/11/03 职场文书
教师创先争优承诺书
2015/04/27 职场文书
二审答辩状格式
2015/05/22 职场文书
用 Python 元类的特性实现 ORM 框架
2021/05/19 Python
浅析JavaScript中的变量提升
2022/06/01 Javascript