JS中表达式的理解
2016-08-04 14:45
211 查看
转载出处:
作者:郑航
链接:http://www.zhihu.com/question/39420977/answer/81250170
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
表达式:是由运算元和运算符(可选)构成,并产生运算结果的语法结构。
以下在ES5中被称为基本表达式(Primary Expression)
this、null、arguments等内置的关键字
变量。即一个已声明的标识符
字面量。仅包括数字字面量、布尔值字面量、字符串字面量、正则字面量
分组表达式,即用来表示立刻进行计算的
这类表达式是原子表达式,是无法再分解的表达式。
除基本表达式以外,还有如下表达式,称为复杂表达式,这类表达式需要其它表达式参与:
对象的初始化表达式、数组的初始化表达式:分明也是字面量的一种,但不把它们算作基本表达式,是因为对象字面量、数组字面量所包含的成员也都是表达式。数组初始化表达式语法如下:
对象的初始化表达式如下:
函数定义表达式(注意,需与函数声明语句区分开)
属性访问表达式:之前一直以为跟在对象后面的句点或者方括号是运算符,实际上不是,它们是属性访问表达式的语法结构的一部分。属性访问表达式语法如下:
或者
调用表达式: 分为“方法调用”与“函数调用”。方法调用的语法是:
函数调用的语法是:
可见,小括号并非一个操作符,而是调用表达式的语法的一部分
对象创建表达式:语法如下:
可见,小括号并非一个操作符,而是调用表达式的语法的一部分
----------------
以上所有表达式,由于未使用运算符,称为单值表达式。除此之外的叫做复合表达式
JavaScript表达式总有返回值,其中,单值表达式的结果是值本身,其他表达式结果是根据运算符进行运算的结果值。
由于每个表达式都有返回值,因此每个表达式都能作为“邻近”的表达式的运算元参与运算。可以将无限个表达式“邻近”地连接成复合表达式
总结:分类如下
单值表达式:不使用运算符的表达式
简单表达式:不能再分解的表达式
复杂表达式:需要其它表达式参与的表达式
复合表达式:由运算符将多个单值表达式结合而成的表达式
所有表达式均有返回值
===============================
语句:JavaScript代码由语句构成,表明了执行过程的流程、限定和约定,形式上可以是单行语句,也可以是由大括号括起来的复合语句。语句由分号来分隔。语句是“使某事发生”的指令,不存在返回值一说
当语句位于以下地点之一时,可以省略分号(不会出现语法错误,但可能造成执行阶段的错误):
一行的最后
整个代码文件的最后
在语法分隔符之前(如复合语句的大括号“}”)
复合语句的大括号“}”之后
其它情况下遗漏分号,会在语法分析过程中报错,全部代码完全不执行。
语句中比较特殊的一类是表达式语句,表示“只有表达式,没有其它语法元素的语句”,例如:
就是一个表达式语句。
作者:郑航
链接:http://www.zhihu.com/question/39420977/answer/81250170
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
表达式:是由运算元和运算符(可选)构成,并产生运算结果的语法结构。
以下在ES5中被称为基本表达式(Primary Expression)
this、null、arguments等内置的关键字
变量。即一个已声明的标识符
字面量。仅包括数字字面量、布尔值字面量、字符串字面量、正则字面量
分组表达式,即用来表示立刻进行计算的
这类表达式是原子表达式,是无法再分解的表达式。
除基本表达式以外,还有如下表达式,称为复杂表达式,这类表达式需要其它表达式参与:
对象的初始化表达式、数组的初始化表达式:分明也是字面量的一种,但不把它们算作基本表达式,是因为对象字面量、数组字面量所包含的成员也都是表达式。数组初始化表达式语法如下:
[expression,expression,expression] 可以有0个及其以上个子表达式
对象的初始化表达式如下:
{ expression1: expression2, expression1: expression2, expression1: expression2 } 在ES5及其之前,expression1只能是字符串字面量; ES6开始支持如下语法: { [expression1]: expression, [expression1]: expression, [expression1]: expression } expression1可以是任何返回值为字符串或Symbol类型的表达式
函数定义表达式(注意,需与函数声明语句区分开)
属性访问表达式:之前一直以为跟在对象后面的句点或者方括号是运算符,实际上不是,它们是属性访问表达式的语法结构的一部分。属性访问表达式语法如下:
expression.identifier 其中,expression可以是任意的表达式,identifier是属性名(必须合法)
或者
expression1[expression2] 其中,两个expression可以是任意的表达式 expression2的值会被转化为字符串(除非它是一个Symbol类型)
调用表达式: 分为“方法调用”与“函数调用”。方法调用的语法是:
expression0([[expression1[,expression2[,expression3]]]) 其中,expression是一个返回值为函数对象的属性访问表达式,小括号提供一个逗号分隔的参数列表。
函数调用的语法是:
expression0([expression1[,expression2[,expression3]]]) 其中,expression0是一个返回值为函数对象的表达式, 小括号提供一个逗号分隔的参数列表
可见,小括号并非一个操作符,而是调用表达式的语法的一部分
对象创建表达式:语法如下:
new expression0([expression1[,expression2[,expression3]]]) 其中,expression0是一个返回值为函数对象的表达式, 小括号提供一个逗号分隔的参数列表(整个小括号内部的参数列表是可以省略的)
可见,小括号并非一个操作符,而是调用表达式的语法的一部分
----------------
以上所有表达式,由于未使用运算符,称为单值表达式。除此之外的叫做复合表达式
JavaScript表达式总有返回值,其中,单值表达式的结果是值本身,其他表达式结果是根据运算符进行运算的结果值。
由于每个表达式都有返回值,因此每个表达式都能作为“邻近”的表达式的运算元参与运算。可以将无限个表达式“邻近”地连接成复合表达式
总结:分类如下
单值表达式:不使用运算符的表达式
简单表达式:不能再分解的表达式
复杂表达式:需要其它表达式参与的表达式
复合表达式:由运算符将多个单值表达式结合而成的表达式
所有表达式均有返回值
===============================
语句:JavaScript代码由语句构成,表明了执行过程的流程、限定和约定,形式上可以是单行语句,也可以是由大括号括起来的复合语句。语句由分号来分隔。语句是“使某事发生”的指令,不存在返回值一说
当语句位于以下地点之一时,可以省略分号(不会出现语法错误,但可能造成执行阶段的错误):
一行的最后
整个代码文件的最后
在语法分隔符之前(如复合语句的大括号“}”)
复合语句的大括号“}”之后
其它情况下遗漏分号,会在语法分析过程中报错,全部代码完全不执行。
语句中比较特殊的一类是表达式语句,表示“只有表达式,没有其它语法元素的语句”,例如:
1+2+3;
就是一个表达式语句。
相关文章推荐
- js函数声明语句与函数表达式的区别深入理解
- 编写高质量的js之正确理解正则表达式回溯
- js中函数声明和函数表达式,立即执行函数理解(笔记)
- 深入理解-Js正则表达式-1
- JS理解正则表达式
- 理解JS表达式
- [JS]深入理解JavaScript系列(4):立即调用的函数表达式
- js中函数声明与函数表达式以及匿名函数的理解
- js中正则表达式的理解(二)
- 深入理解JS正则表达式---分组
- js中正则表达式的理解(一)
- js常用正则表达式验证函数
- 理解VC# 2005中的字符串和正规表达式
- JS效验时间的正则表达式
- Js:常用的正则表达式验证函数
- 关于JS通过正则表达式循环检测多个Email格式_已经测试通过.
- 在JS使用正则表达式屏蔽敏感字符
- JS 正则表达式使用详解
- JS正则表达式
- js验证常用正则表达式集锦