理解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 ...
随机推荐
- P4093 [HEOI2016/TJOI2016]序列
题目链接 题意分析 我们假设每一个数都有一个变动范围\([L_i,R_i]\) 那么我们令\(dp[i]\)表示以\(i\)结尾的最长不下降子序列的长度 那么就是\(dp[i]=max\{dp[j]+ ...
- MySql 的操作日志 历史记录
如何查看mysql数据库操作记录日志 1.首先确认你日志是否启用了mysql>show variables like 'log_bin'. 2.如果启用了,即ON,那日志文件就在mysql的安装 ...
- .net core webapi 部署到 IIS
主要参考这篇: https://blog.csdn.net/weixin_37645900/article/details/80224100 但是我这边按这篇部署出来的一直没成功. 最后是做了如下的修 ...
- lvm拉伸与快照
一.拉伸 *用fdisk分区 *构建pv *将pv加入vg *将pv内的pe加入lv *通过resize将文件系统的容量增加 1.分区 [root@server3 ~]# fdisk /dev/vdb ...
- my35_MGR添加新节点
MGR添加节点主要涉及以下两个参数 group_replication_group_seeds #可以动态修改 group_replication_ip_whitelist #需要关闭 ...
- python3.5+ asyncio await异步详解
import asyncio,time from collections import defaultdict from pprint import pprint collect=defaultdic ...
- python namedtuple命名元组
from collections import namedtuple Animal=namedtuple('Animal','name age type') perry=Animal(name='pe ...
- 实验Complex
#include<iostream> #include<cmath> using namespace std; class Complex { public: Complex ...
- MySQL prompt提示符总结
A counter that increments for each statement you issue \D 当前日期 \d 当前数据库 \h 数据库主机 \l The current de ...
- 解决display none到display block 渲染时间过长的问题,以及bootstrap模态框导致其他框中input不能获得焦点问题的解决
在做定制页面的时候,遇到这么一个问题,因为弹出框用的是bootstrap的自带的弹出框,控制显示和隐藏也是用自带的属性控制 控制显示,在触发的地方 例如botton上面加上 data-toggle=& ...