第一部分 JavaScript 编程语言

02 JavaScript 基础知识

<script> 标签

代码结构

"use strict" 模式

变量

数据类型

typeof 运算符

语法:typeof x 与 typeof(x) 相同。typeof 是一个操作符,不是一个函数。这里的括号还是 typeof 的一部分,它是数学运算分组的括号。

typeof undefined  // "undefined"
typeof 0          // "number"
typeof 10n        // "bigint"
typeof true       // "boolean"
typeof "foo"      // "string"
typeof Symbol('id') // "symbol"
typeof Math       // "object"
typeof null       // "object"
typeof alert      // "function"

交互:alert, prompt, confirm

// 显示一条信息,并等待用户按下 "OK"
alert('Hello')
// 显示一个带有文本消息的窗口,还有 input 框和确定取消按钮。取消返回 null
// title 显示组用户的文件,default 可选的第二个参数,指定 input 的初始值
let result = prompt(title, [defult])
// 显示一个带有 question 以及确定和取消按钮的窗口,确定返回 true,取消取回 false
let result = confirm(question)

这些方法是模态的:它们暂停脚本的执行,并且不允许用户与该页面的其余部分进行交互,直到窗口被解除。

类型转换

字符串转换

数字型转换

变成
undefined NaN
null 0
true 和 false 1 and 0
string 读取字符串,两端的空白字符(空格,换行符 \n,制表符 \t 等)会被忽略。空字符串变成 0。转换出错则输出 NaN

布尔类型转换

基础运算符,数学运算

数学运算符

+, -, *, /, 取余 %, 示幂 **

连接字符串,二元运算符 +

数字转化,一元运算符 +

+value, 放在值的前面,与 Number(value) 相同

运算符优先级

赋值运算符

自增/自减

位运算符

逗号运算符

值的比较

字符串比较

不同类型间的比较

严格相等

nullundefinec 进行比较

null == undefined   // true
null === undefined  // false
alert( null > 0 );  // (1) false
alert( null == 0 ); // (2) false
alert( null >= 0 ); // (3) true

为什么会出现这种反常结果,这是因为相等性检查 == 和普通比较符 > < >= <= 的代码逻辑是相互独立的。进行值的比较时,null 会被转化为数字,因此它被转化为了 0。这就是为什么(3)中 null >= 0 返回值是 true,(1)中 null > 0 返回值是 false。

另一方面,undefined 和 null 在相等性检查 == 中不会进行任何的类型转换,它们有自己独立的比较规则,所以除了它们之间互等外,不会等于任何其他的值。这就解释了为什么(2)中 null == 0 会返回 false。

特立独行的 undefined

alert( undefined > 0 ); // false (1)
alert( undefined < 0 ); // false (2)
alert( undefined == 0 ); // false (3)

(1) 和 (2) 都返回 false 是因为 undefined 在比较中被转换为了 NaN,而 NaN 是一个特殊的数值型值,它与任何值进行比较都会返回 false。
(3) 返回 false 是因为这是一个相等性检查,而 undefined 只与 null 相等,不会与其他值相等。

条件分支: if 和三元运算符

逻辑运算符

|| 或

&& 与

! 非

test