`
frank1998819
  • 浏览: 763726 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类

javascript 中的几种 括号 (转)

    博客分类:
  • JS
 
阅读更多
小括号
       JavaScript中小括号有五种语义
       语义1,函数声明时参数表
              function func(arg1,arg2){ 
              // ...
              } 
       语义2,和一些语句联合使用以达到某些限定作用
              // 和for in一起使用
                      for(var a in obj){ 
              // ...
              } 
              // 和if一起使用
                      if(boo){ 
              //...
              } 
              // 和while一起使用
              while(boo){ 
              // ...
              } 
              // 和do while一起使用 do{ 
              // ...
              }
              while(boo) 
              注意:在与if、while及do while一起使用时小括号会将其中的表达式结果隐式的转换成布尔值。见无处不在的隐式类型转换 。
       语义3,和new一起使用用来传值(实参)
              // 假设已经定义了类Person,它有两个字段姓名(name),年龄(age)     
              var p1 = new Person('Jack',26); 
       语义4,作为函数或对象方法的调用运算符(如果定义了参数也可与语义3一样传实参)
              // 假设已经定义了函数func    
               func(); 
              // 假设已经定义了对象obj,且拥有func方法
              obj.func(); 
              这里提下typeof运算符,有人喜欢这么使用
              请注意typeof后的小括号并非语义4(即不是函数调用),而是后面提到的语义5。我使用typeof一般不加后面的小括号。见 具名函数的多种调用方式
       语义5,强制表达式运算
              function strToJson(str){                  // eval 中字符串两旁加了强制运算符()
              var json = eval('(' + str + ')');      
              return json; 
              } 
              关于语义5,大家最熟悉的莫过于使用eval解析JSON
              又如使用较多的是匿名函数自执行         
              (function(){ 
              // ...
              })(); 
              注意,以上代码第1对小括号是语义5,第3对则是语义4。

大括号
       JavaScript中大括号有四种语义作用

       语义1,组织复合语句,这是最常见的

              if( condition ) { 
              //...
              }else { 
              //...
              }  for() { 
              //...
              } 

       语义2,对象直接量声明

              var obj = {      name : 'jack',      age : 23  }; 

       整个是个赋值语句,其中的{name:'jack',age:23}是个表达式。

       语义3,声明函数或函数直接量

              function f1(){ 
              //...
              } 
              var f2 = function(){ 
              //...
              } 

        f1与非f2的区别是前者在语法解释期,后者在运行期。区别在于:如果调用该函数的代码在函数定义之后,则没有区别;如果调用该函数的代码在函数定义之前,则f1仍然可以调用,f2则会报错,提示f2未定义。

       语义4,结构化异常处理的语法符号
              try { 
              //...
              }catch( ex ){ 
              //...
              }finally{ 
              //...
              } 

       这里的大括号与符合语句(语义1 )是有区别的,大括号中如果只有一条语句,在if/else/for等中大括号是可以省略的,但try/catch/finally则不能省略。

以下代码纠结了偶N久

              function(){}() //匿名函数立即执行, 语法分析期报
              {}.constructor //获取对象直接量的构造器,语法分析期报错


       令人不解的是为何[].constructor这么写却不报错呢,一个是想获取对象直接量的构造器,一个是获取数组直接量的构造器而已。

       当然添加个变量接收也不会报错

       同样的情况如

              var fn = function(){}(),也不会报错。

       实际上是js的“语句优先”在作怪,即{}被理解成复合语句块(语义1 )而不是对象直接量(语义2 )或声明函数(语义3 )的语义。

function(){}(),大括号被理解成复合语句,自然前面的function()声明函数的语法不完整导致语法分析期出错。

       {}.constructor,大括号被理解成复合语句,大括号后面是点运算符,点运算符前没有合理的对象自然也报错。

       修复方式众所周知:加个强制运算符()

       (function(){})(),(function(){});//强制其理解为函数(语义3 ),“函数()”表示执行该函数,即声明后立即执行了。

       ({}).constructor //({})强制把大括号理解成对象直接量(语义2 ),“对象.xx”表示获取对象的成员,自然后面的点运算符可以正常执行了。


中括号
       JavaScript中括号有四种语义

       语义1,声明数组

              var ary = []; // 声明一个空数组
              var ary = [1,3]; // 声明一个数组,同时赋初值


       语义2,取数组成员

              var ary = [1,2,3];  var item = ary[0]; 

       语义3,定义对象成员 (可以不遵循标识符规则 )

              var obj = {}; 
              // 为obj添加一个属性name,name是合法的标识符,即也可以通过obj.name方式来定义
              obj['name'] = 'jack';  
              // 为obj添加一个属性2a,2a不是合法的标识符(不能以数字开头),不能通过obj.2a来定义
              obj['2a'] = 'test';  

       语义4,取对象成员

              var obj = {name:'jack'};  obj['2a'] = 'test'; 
              obj['name']; // --> jack
              obj['2a']; // --> test (不能通过obj.2a获取)
分享到:
评论

相关推荐

    JAVASCRIPT中定义对象的几种方式.pdf

    在讨论JavaScript中定义对象的几种方式之前,我们先理解一下JavaScript中的对象到底是什么。JavaScript是一种基于原型的编程语言,对象是其核心概念之一。对象可以被视为一个容器,存储各种键值对集合,键为属性名,...

    javascript基础

    创建一个简单的JavaScript程序通常包含以下几个步骤: 1. **HTML结构**:首先需要有一个HTML文件,其中包含一个或多个元素,这些元素可以通过JavaScript进行操作。 2. **JavaScript代码**:在HTML文件中插入...

    JavaScript中使用Json范例

    2. JSON的基本数据类型:JSON支持以下数据类型:数字(整数或浮点数)、字符串(在双引号中)、布尔值(true或false)、数组(在方括号中)、对象(在花括号中)、null。注意,JSON不支持JavaScript中的函数和日期等...

    javascript中数组、对象

    创建对象的方式有以下几种: 1. 对象字面量: ```javascript var obj = {}; // 创建空对象 var obj = {name: 'Alice', age: 30}; // 创建包含属性的对象 ``` 2. 构造函数: ```javascript var obj = new ...

    JavaScript标准参考教程(alpha)

    ”中,作者列举了学习JavaScript的几大理由:它能够操控浏览器,有广泛的使用领域,学习起来相对容易,性能强大,具备开放性,并且有着广泛的社区支持。 接着,第三章“JavaScript的历史”介绍了这门语言的发展历程...

    javascript

    1. JavaScript的变量类型:JavaScript中主要有几种基本的变量类型,包括字符串、整型、浮点型、布尔型、数组、对象、JSON对象、NaN、null和undefined。这些类型帮助我们定义和操作数据。 - 字符串类型用于表示文本...

    javascript的几种写法总结

    本文将总结几种常见的JavaScript写法,帮助读者更好地理解这门语言的多样性和表达能力。 首先,我们来探讨JavaScript变量的定义和使用。在JavaScript中,变量定义通常采用关键字var来声明。例如: ```javascript ...

    解析Javascript中大括号“{}”的多义性

    大括号在JavaScript中有多种不同的语义,主要包括以下几种: 1. 组织复合语句 这是大括号最常见的用途之一。在JavaScript中,我们使用大括号来组合多条语句形成一个复合语句(也称为代码块)。复合语句可以用于控制...

    JavaScript学习(一)

    在JavaScript学习的第一阶段,通常会涉及以下几个核心知识点: 1. **基础语法**:JavaScript的基础包括变量声明(var, let, const)、数据类型(如字符串、数字、布尔值、null、undefined、对象、数组、Symbol和...

    javascript-void(0)是什么意思?JS的几种跳转.docx

    ### JavaScript中的几种跳转方式 #### 1. `window.open(url)` - **功能**:打开一个新的浏览器窗口。 - **示例**: ```javascript window.open('https://example.com'); ``` #### 2. 自定义函数 - **功能**:...

    javascript中创建对象的几种方法总结

    在JavaScript中,有几种常见的创建对象的方法,这里我们将详细探讨这些方法。 1. **对象字面量**:这是最简单且直观的创建对象的方式。通过大括号 `{}` 创建一个空对象,然后通过点`.`或方括号`[]`来添加属性和方法...

    JavaScript学习之二 — JavaScript创建对象的8种方式

    JavaScript是Web开发中不可或缺的一部分,尤其在前端领域更是发挥着核心作用。在JavaScript中,对象是数据和函数的集合,是实现面向对象编程的基础。本文将深入探讨JavaScript创建对象的8种常见方式,帮助你更好地...

    JavaScript5.rar

    在JavaScript5.chm文件中,可能会涵盖以下几个核心知识点: 1. **变量声明与作用域**:ES5引入了`var`关键字来声明变量,但未提供块级作用域,导致了一些常见的作用域陷阱。全局变量在整个脚本中都可访问,而局部...

    【JavaScript源代码】JavaScript中分号的一些细节.docx

    按照ECMA-262标准,ASI会在以下几种情况下发生: - 当遇到一个不符合任何文法规则的标记时,并且在该标记和前一个标记之间至少有一个换行符。 - 当遇到一个右大括号 `}`。 - 当解析器无法将剩余的标记流解析成完整的...

    javascript garden

    为了避免这一问题,可以采用以下几种方法: - 在数字后添加额外的点号,使解析器识别为对象操作而非浮点数。 ```javascript 2..toString(); // "2" ``` - 在数字和点号之间留出空格。 ```javascript 2 ....

    JavaScript例子——计算

    在JavaScript中,计算主要涉及以下几个方面: 1. **基本数学运算**:JavaScript支持加法(+)、减法(-)、乘法(*)、除法(/)和取模(%)等基本运算符。例如: ```javascript let num1 = 10; let num2 = 5; ...

    javascript实例

    在JavaScript中,我们有以下几个重要的知识点: 1. **变量与数据类型**:JavaScript是动态类型语言,变量无需提前声明,通过`var`, `let`, 或 `const`关键字定义。数据类型包括基本类型(如字符串、数字、布尔值、...

Global site tag (gtag.js) - Google Analytics