javascript的 {} 语句块详解

 更新时间:2016年02月27日 11:53:37   投稿:hebedich  
这篇文章主要介绍了javascript的 {} 语句块详解的相关资料,需要的朋友可以参考下

今日学习解析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 学习笔记 Black.Caffeine 09.11.28

    JavaScript 学习笔记 Black.Caffeine 09.11.28

    这两天终于写出了一个个人认为真正意义上的作业了,不过,最大感受就是。。。IE太垃圾了。。。so,这个作业实际上也没有完成的很完美,因为,在IE上还是有兼容性的问题存在,不错,就此先自我总结一下吧~免得以后又忘了~
    2009-11-11
  • Javascript实现异步编程的过程

    Javascript实现异步编程的过程

    这篇内容详细分析了Javascript实现异步编程的过程以及原理解释,对此知识点有兴趣的朋友可以学习下。
    2018-06-06
  • JavaScript中prototype为对象添加属性的误区介绍

    JavaScript中prototype为对象添加属性的误区介绍

    prototype为对象添加属性的的过程中有些误区,在本文将为大家详细介绍下,感兴趣的朋友可不要错过
    2013-10-10
  • De facto standard 世界上不可思议的事实标准

    De facto standard 世界上不可思议的事实标准

    前些天IEBlog中提到实现互通并不是只靠标准就行,其中举出了一些关于事实上的标准的考虑——所谓“事实上的标准”,也就是并非标准,但大家都遵循着它去做事情的那么一种东西。
    2010-08-08
  • 收藏一些不常用,但是有用的代码

    收藏一些不常用,但是有用的代码

    收藏一些不常用,但是有用的代码...
    2007-03-03
  • JavaScript事件列表解说

    JavaScript事件列表解说

    JavaScript事件列表解说...
    2006-12-12
  • js函数在frame中的相互调用详解

    js函数在frame中的相互调用详解

    一个HTML页面可以有一个或多个子框架,这些子框架以<iframe>来标记,用来显示一个独立的HTML页面。这里所讲的框架编程包括框架的自我控制以及框架之间的互相访问,例如从一个框架中引用另一个框架中的JavaScript变量、调用其他框架内的函数、控制另一个框架中表单的行为等
    2014-03-03
  • JavaScript基础语法与数据类型介绍

    JavaScript基础语法与数据类型介绍

    这篇文章介绍了JavaScript基础语法与数据类型,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • 深入了解javascript原型和原型链

    深入了解javascript原型和原型链

    本文详细讲解了javascript原型和原型链,文中通过示例代码介绍的非常详细。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>
    2021-12-12
  • JavaScript程序中的流程控制语句用法总结

    JavaScript程序中的流程控制语句用法总结

    条件判断和循环是程序中的基本执行流程控制方式,这里我们落实到具体语句,来看一下JavaScript程序中的流程控制语句用法总结
    2016-05-05

最新评论