这是我参与新手入门的第2篇文章。
前言
去年年底买了最新一版的js红宝书,拖延症一直没怎么看。借助此次参与掘金活动写文章的机会,开始边看边记一些读书笔记。
作为一个半路出家的码农,当年看第三版时很多地方是懵懵的,如今再看此书,很多知识点都变得清晰了,故记录一下以前没有注意到的有趣知识点,以及新版新增加的一些重要知识点,同时记录一些有趣的代码执行结果。
第一、二章
第一、二章主要是一些介绍性的内容。包括JavaScript的历史,功能介绍,<script>标签的使用方法等,了解即可。
第三章(语言基础)
这一章还是一些基础知识。值得注意的是关于ES6的一些新增知识。
变量
let与const声明基本相同,块级作用域、暂时性死区(temporal dead zone)、不可重复声明同一变量名、必须先声明再调用const声明变量的同时必须初始化变量,且不可再修改该变量(可修改对象属性,但不可修改其引用)- 原则上不再使用
var声明变量。优先使用const,其次是let
数据类型
- 使用模板字面量语法,将表达式转换为字符串时会调用 toString():
上述模板字面量在转换为字符串时,调用了对象let foo = {toString: () => "World"}; console.log(`Hello, ${ foo }!`) // Hello World!foo的toString方法,返回了"World"。
操作符
- 递增/递减操作符
无论使用前缀递增还是前缀递减操作符,变量的值都会在语句被求值之前改变;后缀版递增和递减在语句被求值之后才发生。如下代码:
let num1 = 2;
let num2 = 20;
//前缀版
let num3 = --num1 + num2;
let num4 = num1 + num2;
console.log(num3); //21
console.log(num4); //21
//后缀版
let num3 = num1-- + num2;
let num4 = num1 + num2;
console.log(num3); //22
console.log(num4); //21
后缀版的情况可能比较不容易理解。如前文所述,计算
num3时,尚未对num1执行后缀版递减,故其仍为2,求得num3是22;之后对num1执行递减,变为1,再计算num4,就变成了1 + 20 = 21。
- 逻辑与操作符为短路操作符,故下列代码不会报错:
let found = false;
let result = (found && abc); //abc为未声明的变量名
console.log(result); // false;
如果第一个操作数决定了结果,那么永远不会对第二个操作数求值。
-
逻辑或操作符也是短路操作符,与上述行为类似
-
指数操作符
**
console.log(3 ** 2); //9
console.log(16 ** 0.5); //4
let num1 = 3;
num1 **= 2;
console.log(num1); //9
- 任何关系操作符在涉及比较
NaN时,都返回false,会有如下有趣现象:
let res1 = NaN < 3; //false
let res2 = NaN >=3; //false
- 等于操作符会有下列情况:
true == 1; //true
true == 2; //false
建议任何时候都使用全等
===和不全等!==。
语句
- 标签语句,语法如下:
// label: statement
start: for(let i = 0; i < count; i++){
console.log(i);
}
标签语句的典型应用场景是嵌套循环,通过
break或continue语句引用。
后记
本文主要是关于JavaScript基础知识相关的一些知识点拾遗。记录了一些平时没注意到过的内容,以及一些可能没什么用,但挺有趣的代码片段,内容比较零碎。本来打算继续写第四章的,但快到截稿时间了但第四章内容更重要些,值得单独开一篇仔细理一理。这篇有些凌乱的读书笔记,就先到此为止了。