为什么要做这个系列?
做一个书记的缩读版,既完成了知识的输出,也给其他朋友提供一个概要。
简介
暂且不讨论Node.js,只讨论浏览器环境运行的JS。
- JavaScript是一种让你的网页动起来的语言。
- JavaScript 遵循同源策略,且不能够读写硬盘。
- 与相机/麦克风和其它设备进行交互需要获得用户的明确许可。
- F12即可使用谷歌浏览器的调试功能,其他高级调试操作参照文档进行学习。
JavaScript 基础知识
基础语法
- 可以使用 <script> 标签将 JavaScript 程序插入到 HTML 文档的任何位置。
- 脚本文件可以通过 src 特性(attribute)添加到 HTML 文件中,如果设置了 src 特性,script 标签内容将会被忽略。
- 注释和C语言一致。
[1, 2].forEach(alert);
forEach的用法。- ECMAScript 5 (ES5) 的出现。ES5 规范增加了新的语言特性并且修改了一些已经存在的特性。为了保证旧的功能能够使用,大部分的特性修改是默认不生效的。需要指令
use strict
来明确地激活这些特性。请确保 “use strict” 出现在脚本的最顶部 - 用let来定义变量,const 定义常量。
数据类型
- number 类型代表整数和浮点数,数字类型包括Infinity、-Infinity 和 NaN。除以 0 得到Infinity,NaN 代表一个计算错误,无穷以外的错误计算错误报NaN。
- 所有大于 (253-1) 的奇数都不能用 “number” 类型存储。
- BigInt 类型是最近被添加到 JavaScript 语言中的,用于表示任意长度的整数。可以通过将 n 附加到整数字段的末尾来创建 BigInt 值。
- 在 JavaScript 中,有三种包含字符串的方式。反引号是 功能扩展 引号。它们允许我们通过将变量和表达式包装在 ${…} 中,来将它们嵌入到字符串中。
- JavaScript 中没有 character 类型。
- JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值。
- 如果一个变量已被声明,但未被赋值,那么它的值就是 undefined.
交互
- alert
- prompt
result = prompt(title, [default]);
浏览器会显示一个带有文本消息的模态窗口,还有 input 框和确定/取消按钮。 - confirm
result = confirm(question);
类型转换
- 在算术中,会自动进行 number 类型转换。
alert( "6" / "2" ); // 3
String(value)
Number(str)
数学运算
- 求幂 **
- 只要任意一个运算元是字符串,那么另一个运算元也将被转化为字符串。
alert( '1' + 2 ); // "12"
- 但是如果运算元不是数字,一元运算符则会将其转化为数字。
alert( +true ); // 1
- 链式赋值从右到左进行计算,
a = b = c = 2 + 2;
- 字符串是按字符逐个进行比较的。
- 当对不同类型的值进行比较时,JavaScript 会首先将其转化为数字(number)再判定大小。
- 严格相等运算符 === 在进行比较时不会做任何的类型转换。
- 当使用非严格相等 == 比较二者时JavaScript 存在一个特殊的规则,会判定它们相等。它们俩就像“一对恋人”,仅仅等于对方而不等于其他任何的值(只在非严格相等下成立)。
alert( null == undefined ); // true
- undefined 和 null 在相等性检查 == 中不会进行任何的类型转换,它们有自己独立的比较规则。
alert( null == 0 ); // (2) false
alert( null >= 0 ); // (3) true
大于小于转成了数字。- undefined 不应该被与其他值进行比较,在比较中被转换为了 NaN,而 NaN 是一个特殊的数值型值,它与任何值进行比较都会返回 false。而 undefined 只与 null 相等,不会与其他值相等。
逻辑运算符
JavaScript 中有四个逻辑运算符:||(或),&&(与),!(非),??(空值合并运算符)。
- 或运算符 || 做了如下的事情:
从左到右依次计算操作数。
处理每一个操作数时,都将其转化为布尔值。如果结果是 true,就停止计算,返回这个操作数的初始值。
如果所有的操作数都被计算过(也就是,转换结果都是 false),则返回最后一个操作数。 - 我们用或运算 || 来选择有数据的那一个,并显示出来
- ?? 返回其中的非空值。
循环
- for 循环的任何语句段都可以被省略。
let i = 0;
for (; i < 3;) {
alert( i++ );
}