表达式:是由运算元和运算符(可选)构成,并产生运算结果的语法结构。

基本表达式

以下在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类型的表达式(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表达式的更多相关文章

  1. 怎么理解js中的事件委托

    怎么理解js中的事件委托 时间 2015-01-15 00:59:59  SegmentFault 原文  http://segmentfault.com/blog/sunchengli/119000 ...

  2. 理解JS闭包

    从事web开发工作,尤其主要是做服务器端开发的,难免会对客户端语言JavaScript一些概念有些似懂非懂的,甚至仅停留在实现功能的层面上,接下来的文章,是记录我对JavaScript的一些概念的理解 ...

  3. 全面理解js面向对象

    前言 当今 JavaScript 大行其道,各种应用对其依赖日深.web 程序员已逐渐习惯使用各种优秀的 JavaScript 框架快速开发 Web 应用,从而忽略了对原生 JavaScript 的学 ...

  4. javascript深入理解js闭包(转)

    javascript深入理解js闭包 转载  2010-07-03   作者:    我要评论 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. ...

  5. 【学习笔记】深入理解js原型和闭包系列学习笔记——精华

    深入理解js原型和闭包笔记: 1.“一切皆是对象”,对象是属性的集合. 丨 函数也是对象,但是使用typeof时为什么函数返回function而 丨  不是object呢,js为何要对函数做这样的区分 ...

  6. 【学习笔记】深入理解js原型和闭包(9)—— 简述【执行上下文】下

    继续上一篇文章(https://www.cnblogs.com/lauzhishuai/p/10078231.html)的内容. 上一篇我们讲到在全局环境下的代码段中,执行上下文环境中有如何数据: 变 ...

  7. 【学习笔记】深入理解js原型和闭包(8)——简述【执行上下文】上

    什么是“执行上下文”(也叫做“执行上下文环境”)?暂且不下定义,先看一段代码: 第一句报错,a未定义,很正常.第二句.第三句输出都是undefined,说明浏览器在执行console.log(a)时, ...

  8. 深入理解JS中的对象(三):class 的工作原理

    目录 序言 class 是一个特殊的函数 class 的工作原理 class 继承的原型链关系 参考 1.序言 ECMAScript 2015(ES6) 中引入的 JavaScript 类实质上是 J ...

  9. 深入理解JS:执行上下文中的this(二)

    目录 序言 Function.prototype.bind() 方法 箭头函数 参考 1.序言 在 深入理解JS:执行上下文中的this(一) 中,我们主要深入分析全局环境和函数环境中函数调用的 th ...

随机推荐

  1. P4093 [HEOI2016/TJOI2016]序列

    题目链接 题意分析 我们假设每一个数都有一个变动范围\([L_i,R_i]\) 那么我们令\(dp[i]\)表示以\(i\)结尾的最长不下降子序列的长度 那么就是\(dp[i]=max\{dp[j]+ ...

  2. MySql 的操作日志 历史记录

    如何查看mysql数据库操作记录日志 1.首先确认你日志是否启用了mysql>show variables like 'log_bin'. 2.如果启用了,即ON,那日志文件就在mysql的安装 ...

  3. .net core webapi 部署到 IIS

    主要参考这篇: https://blog.csdn.net/weixin_37645900/article/details/80224100 但是我这边按这篇部署出来的一直没成功. 最后是做了如下的修 ...

  4. lvm拉伸与快照

    一.拉伸 *用fdisk分区 *构建pv *将pv加入vg *将pv内的pe加入lv *通过resize将文件系统的容量增加 1.分区 [root@server3 ~]# fdisk /dev/vdb ...

  5. my35_MGR添加新节点

    MGR添加节点主要涉及以下两个参数 group_replication_group_seeds    #可以动态修改 group_replication_ip_whitelist      #需要关闭 ...

  6. python3.5+ asyncio await异步详解

    import asyncio,time from collections import defaultdict from pprint import pprint collect=defaultdic ...

  7. python namedtuple命名元组

    from collections import namedtuple Animal=namedtuple('Animal','name age type') perry=Animal(name='pe ...

  8. 实验Complex

    #include<iostream> #include<cmath> using namespace std; class Complex { public: Complex ...

  9. MySQL prompt提示符总结

      A counter that increments for each statement you issue \D 当前日期 \d 当前数据库 \h 数据库主机 \l The current de ...

  10. 解决display none到display block 渲染时间过长的问题,以及bootstrap模态框导致其他框中input不能获得焦点问题的解决

    在做定制页面的时候,遇到这么一个问题,因为弹出框用的是bootstrap的自带的弹出框,控制显示和隐藏也是用自带的属性控制 控制显示,在触发的地方 例如botton上面加上 data-toggle=& ...