理解JS表达式
基本表达式
- this、null、arguments等内置的关键字
- 变量。即一个已声明的标识符
- 字面量。仅包括数字字面量、布尔值字面量、字符串字面量、正则字面量
- 分组表达式,即用来表示立刻进行计算的
这类表达式是原子表达式,是无法再分解的表达式。
复杂表达式
除基本表达式以外,还有如下表达式,称为复杂表达式,这类表达式需要其它表达式参与:
对象的初始化表达式、数组的初始化表达式:分明也是字面量的一种,但不把它们算作基本表达式,是因为对象字面量、数组字面量所包含的成员也都是表达式。数组初始化表达式语法如下:
[expression,expression,expression] 可以有0个及其以上个子表达式
对象的初始化表达式如下:
{
expression1: expression2,
expression1: expression2,
expression1: expression2
}
在ES5及其之前,expression1只能是字符串字面量; ES6开始支持如下语法: {
[expression1]: expression,
[expression1]: expression,
[expression1]: expression
}
expression1可以是任何返回值为字符串或Symbol类型的表达式(ES6新增的一种数据类型,Symbol可用来定义对象的唯一属性名;)- 函数定义表达式(注意,需与函数声明语句区分开)
- 属性访问表达式:之前一直以为跟在对象后面的句点或者方括号是运算符,实际上不是,它们是属性访问表达式的语法结构的一部分。属性访问表达式语法如下:
expression.identifier 其中,expression可以是任意的表达式,identifier是属性名(必须合法)
或者
expression1[expression2] 其中,两个expression可以是任意的表达式
expression2的值会被转化为字符串(除非它是一个Symbol类型)
- 调用表达式: 分为“方法调用”与“函数调用”。方法调用的语法是:
expression0([[expression1[,expression2[,expression3]]]) 其中,expression是一个返回值为函数对象的属性访问表达式,小括号提供一个逗号分隔的参数列表。
以上所有表达式,由于未使用运算符,称为单值表达式。除此之外的叫做复合表达式
JavaScript表达式总有返回值,其中,单值表达式的结果是值本身,其他表达式结果是根据运算符进行运算的结果值。
由于每个表达式都有返回值,因此每个表达式都能作为“邻近”的表达式的运算元参与运算。可以将无限个表达式“邻近”地连接成复合表达式
总结:分类如下
- 单值表达式:不使用运算符的表达式
- 简单表达式:不能再分解的表达式
- 复杂表达式:需要其它表达式参与的表达式
- 复合表达式:由运算符将多个单值表达式结合而成的表达式
所有表达式均有返回值
===============================
语句:JavaScript代码由语句构成,表明了执行过程的流程、限定和约定,形式上可以是单行语句,也可以是由大括号括起来的复合语句。语句由分号来分隔。语句是“使某事发生”的指令,不存在返回值一说
当语句位于以下地点之一时,可以省略分号(不会出现语法错误,但可能造成执行阶段的错误):
- 一行的最后
- 整个代码文件的最后
- 在语法分隔符之前(如复合语句的大括号“}”)
- 复合语句的大括号“}”之后
其它情况下遗漏分号,会在语法分析过程中报错,全部代码完全不执行。
语句中比较特殊的一类是表达式语句,表示“只有表达式,没有其它语法元素的语句”,例如:
1+2+3;
就是一个表达式语句。
链接:https://www.zhihu.com/question/39420977/answer/81250170
理解JS表达式的更多相关文章
- 怎么理解js中的事件委托
怎么理解js中的事件委托 时间 2015-01-15 00:59:59 SegmentFault 原文 http://segmentfault.com/blog/sunchengli/119000 ...
- 理解JS闭包
从事web开发工作,尤其主要是做服务器端开发的,难免会对客户端语言JavaScript一些概念有些似懂非懂的,甚至仅停留在实现功能的层面上,接下来的文章,是记录我对JavaScript的一些概念的理解 ...
- 全面理解js面向对象
前言 当今 JavaScript 大行其道,各种应用对其依赖日深.web 程序员已逐渐习惯使用各种优秀的 JavaScript 框架快速开发 Web 应用,从而忽略了对原生 JavaScript 的学 ...
- javascript深入理解js闭包(转)
javascript深入理解js闭包 转载 2010-07-03 作者: 我要评论 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. ...
- 【学习笔记】深入理解js原型和闭包系列学习笔记——精华
深入理解js原型和闭包笔记: 1.“一切皆是对象”,对象是属性的集合. 丨 函数也是对象,但是使用typeof时为什么函数返回function而 丨 不是object呢,js为何要对函数做这样的区分 ...
- 【学习笔记】深入理解js原型和闭包(9)—— 简述【执行上下文】下
继续上一篇文章(https://www.cnblogs.com/lauzhishuai/p/10078231.html)的内容. 上一篇我们讲到在全局环境下的代码段中,执行上下文环境中有如何数据: 变 ...
- 【学习笔记】深入理解js原型和闭包(8)——简述【执行上下文】上
什么是“执行上下文”(也叫做“执行上下文环境”)?暂且不下定义,先看一段代码: 第一句报错,a未定义,很正常.第二句.第三句输出都是undefined,说明浏览器在执行console.log(a)时, ...
- 深入理解JS中的对象(三):class 的工作原理
目录 序言 class 是一个特殊的函数 class 的工作原理 class 继承的原型链关系 参考 1.序言 ECMAScript 2015(ES6) 中引入的 JavaScript 类实质上是 J ...
- 深入理解JS:执行上下文中的this(二)
目录 序言 Function.prototype.bind() 方法 箭头函数 参考 1.序言 在 深入理解JS:执行上下文中的this(一) 中,我们主要深入分析全局环境和函数环境中函数调用的 th ...
随机推荐
- js 实现tab栏切换效果
效果图: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- python使用easyinstall安装xlrd、xlwt、pandas等功能模块的方法
在日常工作中,使用Python时经常要引入一些集成好的第三方功能模块,如读写excel的xlrd和xlwt模块,以及数据分析常用的pandas模块等. 原生的python并不含这些模块,在使用这些功能 ...
- centos崩溃后如何修复
首先看能不能进单用户模式,能进去,就用mount -o remount,rw / 重置成可写的. 不能进单用户模式,就进入光盘救援模式,进去挂载了系统,这时候通常是必要的动态静态库出了问题,先应该做的 ...
- element-ui table多选CheckBox参数解析
element-UI里的table表格与多选框CheckBox的组合很常用,官网也给了很多参数,自己总结了一下,方便日后使用 1.简易用法,没有附加的功能 要在表格里使用CheckBox很简单,只需设 ...
- vue,新手上路,基础,常见问题
1. 报这个错的 都是关键字问题,不要用关键字 做为组件的名字,不然肯定都会报错,如果找不到就一个字母的看,我就是 忘记改组件的名字导致报错,这个问题 改个名字就好,切记改全不然只有页面报错,文 ...
- js中报错"Maximum call stack size exceeded"解决方法
Uncaught RangeError: Maximum call stack size exceeded 错误直译过来就是“栈溢出”,出现这个错误的原因是因为我进行了递归运算,但是忘记添加判断条件, ...
- Java_方法的基本语法格式
[修饰符] 返回值类型 方法名称([参数列表]){ 方法体 } [ ]中的内容是可有可无的 暂时将方法的修饰符编写为 public static 返回值类型有两种情况 : 第一种:无返回值类型,也就是 ...
- cuda9.0 中不存在libnppi.so
编译一个caffe版本,报错找不到 -lnppi 发现使用打是cuda9.0, 但是cuda9.0 中不存在libnppi.so. 只好换成cuda8.0.
- Ubuntu 16.04安装IntelliJ出品的数据库管理工具DataGrip
IntelliJ出品的东西有一个共同特定,就是代码提示做的非常好. DataGrip是除了MySQL Workbench之外的另一个选择. 一.下载 https://www.jetbrains.com ...
- mysql故障总结
MYSQL故障排查 https://zhuanlan.zhihu.com/p/27834293