js 权威指南

78 阅读2分钟

简介

js 是一门高级、动态、解释型编程语言。

使用 ?. (es2020) 条件式访问属性。

let data = {
    x: {
        a: {
            m: 10
        }
    }
}
data.x?.a; // { m: 10 }
data.x?.a?.m; // 10
data.x?.a?.m?.o; // undefined
data.x?.a?.m?.o?.k; // undefined

js 构造表达式最常见方式是使用操作符:

let count = 0; // 定义变量;
count++; // 递增变量;
count--; // 递减变量;
count += 2; // 加 2: 等价于 count =  count + 2;
count *= 3; // 乘 3: 等价于 count =  count * 3;
count // 6: 变量名也是表达式;

类型、值和变量

在 js 中只有 null 和 undefined 是不能调用方法的值。
js 预定了全局常量 Infinity 和 NaN 以应对正无穷和非数值。这些值可以通过 Number 对象的属性获取。

Infinity // Infinity
0/0  // NaN
-1/0 // -Infinity
3/0 // Infinity
NaN // NaN
Number.NaN // NaN
Infinity/Infinity // NaN

非数值 NaN 在 js 中有一个不同寻常的特性:它与任何值比较都不相等,也不等于自己。

NaN == NaN  // false
NaN != NaN // true
null == NaN // false
undefined == NaN // false
Number.isNaN(NaN) // true
Number.isNaN(0/0) // true
Number.isNaN(1/0) // false
0 === -0 // true
0 == false // true
0 === false // false
0 == '' // true
0 === '' // false
0 == '   ' // true
1/0 === 1/0 // true
1/-0 == 1/0 // false
Infinity == -Infinity // false

虽然 js 数值有足够大的精度,能够非常近似地表示 0.1,但无法精确地表示。这可能会导致一些问题。

0.5 - 0.4 // 0.09999999999999998
0.9 - 0.8 // 0.09999999999999998
0.8 - 0.7 // 0.10000000000000009
3.9 - 3.8 // 0.10000000000000009
0.3 - 0.2 // 0.09999999999999998
0.2 - 0.1 // 0.1

js 任何值都可以转换为布尔值

undefined // false
null // false
0 // false
-0 // false
NaN // false
"" // false

null 与 undefined
① null 表示某个值不存在,可以将 null 看成一种特殊对象,表示“没有对象”,用来表示数值、字符串以及对象“没有值”;
② undefined 表示值不存在,但表示一种更深层次的不存在。变量值未初始化、查询不存在的对象属性或数组元素、没有明确返回值的函数返回值、没有传值的函数参数值都是 undefined。undefined 是一个预定义的全局常量,这个常量的初始化值就是 undefined。

typeof null // "object" (表明可以将 null 看成一种特殊对象,表示“没有对象”)
typeof undefined // "undefined" (表示这个值是该特殊类型的唯一成员)

不可修改的原始值与可修改的对象引用
js 中的原始值(undefined、null、布尔值、数值和字符串):是不可修改的,即没有办法改变原始值。

let s = "hello"; // 一个全部小写的字符串
s.toUpperCase(); // 返回 "HELLO"A, 但不会修改 s
s // => "hello":原始字符串并未改变

原始值是按值比较的,即两个值只有在他们的值相同的时候才是相同的。例如, 在比较两个不同的字符串时, 当且仅当这两个字符串长度相同且每个索引的字符