语法

语句和表达式

我们用英语的术语来说明它们的区别

“句子”(sentence)是完整表达某个意思的一组词,由一个或多个“短语”(phrase)组成,它们之间由标点符号或连接词(and 和or 等)连接起来。短语可以由更小的短语组成。有些短语是不完整的,不能独立表达意思;有些短语则相对完整,并且能够独立表达某个意思。这些规则就是英语的语法。

JavaScript 的语法也是如此。语句相当于句子,表达式相当于短语,运算符则相当于标点

符号和连接词。

语句的结果值

获得结果值最直接的方法是在浏览器开发控制台中输入语句,默认情况下控制台会显示所执行的最后一条语句的结果值。

操作

这里var规范规定返回值未undefined

之所以关注表达式,我们希望可以将语句当成表达式来处理,从而不需要将语句封装到函数再用return返回值,我们怎么在代码环境中获取表达式的返回值呢

var b;
if (true) {
b = 4 + 38;
}
// 控制台和REPL中会输出42

代码块的结果就类似隐式返回,但是我们无法直接显式获取,比如这样

var a, b;
a = if (true) {
b = 4 + 38;
};

我们可以用eval(),虽然不是个好方法,但是确实管用

var a, b;
a = eval( "if (true) { b = 4 + 38; }" );
a; // 42

目前ES7有规范,目前暂未实现

var a, b;
a = do {
if (true) {
b = 4 + 38;
}
};
a; // 42

上下文规则

1.大括号

// 对象常量
var a = {
foo: bar()
} // 标签 在很多语言中goto语法被设计成break 和 continue 结合标签进行类似goto的操作
{
foo: bar()
}

2.代码块 左边的{}会被解析为代码块

[] + {}; // "[object Object]"
{} + []; // 0

3.对象解构

function getData() {
// ..
return {
a: 42,
b: "foo"
};
}
var { a, b } = getData();
console.log( a, b ); // 42 "foo"

自动分号(ASI)

只在换行符处添加

ASI的陷阱

function foo(a) {
return a * 2
+ 3 / 12
} // 等同于
function foo(a) {
return a * 2;
+ 3 / 12
} // 解决方案
function foo(a) {
return a * 2
+ 3 / 12;
} function foo(a) {
return (a * 2
+ 3 / 12);
}

return 返回值跨行时,需要用()包起来,或者最后一行加上;

完全依赖ASI进行编码,会出现一些意料之外的陷阱

let d
let a = {
c: 3
}
({c:d} = a)

这里只为了解构a中的c,d变量已经被声明,我们不能按照常规的解构赋值,{ c:d } = a 可以将a中的c解构给d,但是这是不合法的语法,{ c:d } 被认为是代码块,= a被认为是非法的,必须使用()来考虑js引擎这是一个语句,然而这会报错,因为{}()被认为是运行前面的对象

处理这些陷阱的办法,就是依赖ASI编码时,在() []前面加一个分号来隔断

let d
let a = {
c: 3
}
;({c:d} = a)

深入js系列-语法的更多相关文章

  1. Vue.js系列之三模板语法

    Vue.js 使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据.所有 Vue.js 的模板都是合法的 HTML ,所以能被遵循规范的浏览器和 HTML 解 ...

  2. Node.js系列-http

    前言: 最近一直忙着公司项目的事,战友们的留言也没空回复,博客也有段时间没有更新了,年底了就是一个的忙啊~~~(ps:同感的也给个赞吧) 现在前端的就是一直地更新一直有新的东西出来,什么ES2015, ...

  3. JS高级语法与JS选择器

    元素(element)和节点(node) childNode属性和children属性的区别 <!DOCTYPE html> <html lang="en"> ...

  4. Ember.js系列文章

    JS前端框架之Ember.js系列文章 本文为文章索引,主要是罗列Ember.js的相关文章便于阅读. 相关演示代码:github for free. 基础篇 1. EmberJs之What|Why| ...

  5. 【D3.V3.js系列教程】--(十四)有路径的文字

    [D3.V3.js系列教程]--(十四)有路径的文字 1. 在 svg 中插入一個 text // 在 body 中插入一個 svg var svg = d3.select('body').appen ...

  6. 【D3.V3.js系列教程】--(十五)SVG基本图形绘制

    [D3.V3.js系列教程]--(十五)SVG基本图形绘制 1.path <!DOCTYPE html> <html> <head> <meta charse ...

  7. 【D3.V3.js系列教程】--(十二)坐标尺度

    [D3.V3.js系列教程]--(十二)坐标尺度 1.多种类型的缩放尺度 Quantitative Scales Linear Scales Identity Scales Power Scales ...

  8. ExtJs4 笔记(2) ExtJs对js基本语法扩展支持

    本篇主要介绍一下ExtJs对JS基本语法的扩展支持,包括动态加载.类的封装等. 一.动态引用加载 ExtJs有庞大的类型库,很多类可能在当前的页面根本不会用到,我们可以引入动态加载的概念来即用即取.这 ...

  9. node.js系列笔记之node.js初识《一》

    node.js系列笔记之node.js初识<一> 一:环境说明 1.1 Linux系统CentOS 5.8 1.2 nodejs v0.10.15 1.3 nodejs源码下载地址 htt ...

随机推荐

  1. Extra:Cg Math Functions

    常用Cg函数 数学函数 abs(x):绝对值 // float类型的实现 float abs(float x) { return max(-a, a); } sin(x):正弦,输入为弧度 // fl ...

  2. C++中的双冒号作用

    1. 作用域符号::的前面一般是类名称,后面一般是该类的成员名称,C++为例避免不同的类有名称相同的成员而采用作用域的方式进行区分如:A,B表示两个类,在A,B中都有成员member.那么      ...

  3. ElasticSearch6.3.2源码分析之节点连接实现

    ElasticSearch6.3.2源码分析之节点连接实现 这篇文章主要分析ES节点之间如何维持连接的.在开始之前,先扯一下ES源码阅读的一些心得:在使用ES过程中碰到某个问题,想要深入了解一下,可源 ...

  4. (转)MySQL中char(36)被认为是GUID导致的BUG及解决方案

    有时候在使用Toad或在程序中,偶尔会遇到如下的错误: System.FormatExceptionGUID 应包含带 4 个短划线的 32 位数(xxxxxxxx-xxxx-xxxx-xxxx-xx ...

  5. Java基础笔记之数据类型

    一.数据类型 (一)8种基本数据类型(内置数据类型\C#中为值类型) 字符长度:1byte = 8 bit; 布尔:可认为是 1byte (8 bit);

  6. 基于第三方vuejs库组件做适配性个性开发

    相信大家在使用vuejs时候会用到很多的第三方库,能够找到适合自己的库并且加以使用可以大大加快进度,减少bug.但是很多时候会出现这样一个尴尬的境地: 基线的第三方组件并不能很好地满足我们自己地需求, ...

  7. 4-rocketmq 发送时异常:system busy 和 broker busy 解决方案

    原文:https://www.cnblogs.com/enenen/p/10138511.html 推荐阅读:https://juejin.im/post/5d996285f265da5bad4052 ...

  8. Kubernetes CNI网络插件

    CNI 容器网络接口,就是在网络解决方案由网络插件提供,这些插件配置容器网络则通过CNI定义的接口来完成,也就是CNI定义的是容器运行环境与网络插件之间的接口规范.这个接口只关心容器的网络连接,在创建 ...

  9. React路由安装使用和多种方式传参

    安装路由 npm i react-router-dom -S 引入路由 import { BowserRouter as Router, Route, Switch, ... } from " ...

  10. Vue开发日志

    一 搭建环境 mac 安装node brew install node 安装vue 全家桶 npm install -g vue-cli 选择一个目录做初始化 vue init webpack myp ...