本文是阅读现代JavaScript 教程的个人笔记(其实只是看不下去博客太容易分心所以边复制边学习),详情请见网址https://zh.javascript.info/。
接上文 JavaScript 基础知识1
JavaScript 基础知识2
十、条件分支:if 和 ‘?’
感觉没有特别要注意的
十一、逻辑运算符
或运算
一个或运算 || 的链,将返回第一个真值,如果不存在真值,就返回该链的最后一个值。
alert( undefined || null || 0 ); // 0(都是假值,返回最后一个值)
用法
① 获取变量列表或者表达式中的第一个真值。
let firstName = "";
let lastName = "";
let nickName = "SuperCoder";
alert( firstName || lastName || nickName || "Anonymous"); //SuperCoder
② 短路求值(Short-circuit evaluation)
指的是,|| 对其参数进行处理,直到达到第一个真值,然后立即返回该值,而无需处理其他参数。
与运算
与运算返回第一个假值,如果没有假值就返回最后一个值。
alert( 1 && 0 ); // 0
alert( 1 && 5 ); // 5
// 如果第一个操作数是假值,
// 与运算将直接返回它。第二个操作数会被忽略
alert( null && 5 ); // null
alert( 0 && "no matter what" ); // 0
alert( 1 && 2 && null && 3 ); // null
alert( 1 && 2 && 3 ); // 3,最后一个值
非
两个非运算 !! 有时候用来将某个值转化为布尔类型:
alert( !!"non-empty string" ); // true
alert( !!null ); // false
内建的 Boolean 函数也可以实现这个效果:
alert( Boolean("non-empty string") ); // true
alert( Boolean(null) ); // false
非运算符 ! 的优先级在所有逻辑运算符里面最高,所以它总是在 && 和 || 之前执行。
十二、空值合并运算符
空值合并运算符(nullish coalescing operator)
result = a ?? b
其实等于result = (a !== null && a !== undefined) ? a : b;
- ?? 的常见使用场景是提供默认值。
let user;
alert(user ?? "匿名"); // 匿名(user 未定义)
与 || 比较
它们之间重要的区别是:
|| 返回第一个 真 值。
?? 返回第一个 已定义的 值。
优先级
?? 运算符的优先级与 || 相同
十三、while和for
while
任何表达式或变量都可以是循环条件,而不仅仅是比较。在 while 中的循环条件会被计算,计算结果会被转化为布尔值。
let i = 3;
while (i) { // 当 i 变成 0 时,条件为假,循环终止
alert( i );
i--;
}
for
for (begin; condition; step) {
// ……循环体……
}
for 循环的任何语句段都可以被省略。
一次从多层嵌套的循环中跳出来: 需要标签+break
break outer 向上寻找名为 outer 的标签并跳出当前循环。因此,控制权直接从 (*) 转至 alert(‘Done!’)。
十四、switch
switch中是严格相等
十五、函数
function name(parameter1, parameter2, ... parameterN) {
...body...
}
局部变量
在函数中声明的变量只在该函数内部可见。
外部变量
函数也可以访问外部变量
函数对外部变量拥有全部的访问权限。函数也可以修改外部变量。
任何函数之外声明的变量,都被称为 全局 变量。
全局变量在任意函数中都是可见的(除非被局部变量遮蔽)。
默认值
function showMessage(from, text = "no text given") {
alert( from + ": " + text );
}
showMessage("Ann"); // Ann: no text given
十六、函数表达式
无论函数是如何创建的,函数都是一个值。
在 JavaScript 中,函数是一个值,所以我们可以把它当成值对待。
回调函数、匿名函数
在函数声明被定义之前,它就可以被调用。
JavaScript 准备 运行脚本时,首先会在脚本中寻找全局函数声明,并创建这些函数。我们可以将其视为“初始化阶段”。
在处理完所有函数声明后,代码才被执行。所以运行时能够使用这些函数。
函数声明、函数表达式
十七、箭头函数
let sum = (a, b) => a + b;
这个箭头函数是下面这个函数的更短的版本:
let sum = function(a, b) {
return a + b;
};
不太懂的点:undefined、null运用在||,还有运算符转换。