# 类型、值和变量

# 1、数值

10; // 十进制
0xff; // 十六进制
0b10101; // 二进制
0o377; // 八进制
3.14; // 浮点值
1_000_000; // 分隔符
1234n; // BigInt类型数值
1
2
3
4
5
6
7

BigInt 只能表示整数,Math 对象不接收 BigInt 操作数

# 2、文本

三种方式创建字符串字面量

const a = 'test1';
const b = 'test2';
const c = `test3`;
const d =
  '111\
ddd'; // 每行末尾加一个反斜杠(\)从而把字符串字面量写到多行上。
1
2
3
4
5
6

字符串是不可修改的

# 3、null 和 undefined

  • undefined 表示一种系统级别、意料之外或类似错误的没有值
  • null 表示程序级别、正常或意料之中的没有值

# 4、不可修改的原始值与可修改的对象引用

原始值(undefined、null、布尔值、数值和字符串)与对象(包括数组和函数)有一个本质的区别。原始值是不可修改的

  • 原始值是按值比较的
  • 对象不是按值比较的,两个不同的对象即使拥有完全相同的属性和值,它们也不相等。
let a = { x: 1 },
  b = { x: 1 };
a === b; // false

let c = [],
  d = [];
c === b; // false

let e = c;
e[0] = 1;
e === c; // true,e和c引用同一个对象,所以它们相等
1
2
3
4
5
6
7
8
9
10
11

# 4、类型转换

转换为字符串 转换为数值 转换为布尔值
undefined "undefined" NaN false
null "null" 0 false
true "true" 1 true
false "false" 0 false
"" (空字符串) "" 0 false
"1.2" (非空,数值) "1.2" 1.2 true
"one" (非空,非数值) "one" NaN true
0 "0" 0 false
-0 "0" -0 false
1(有限,非零) "1" 1 true
Infinity "Infinity" Infinity true
-Infinity "-Infinity" -Infinity true
NaN "NaN" NaN false
{}(任何对象) - - true
[](空数组) "" 0 true
[9] (一个数值元素) "9" 9 true
['a'] (任何其他数组) "使用join()方法" - true
function(){} (任何函数) "-" - true

除 null 和 undefined 之外的所有值都有 toString()方法

# 5、使用 var 的变量声明

  • 使用 var 声明的变量不具有块作用域。这种变量的作用域仅限于包含函数的函数体,无论它们在函数中嵌套的层次有多深。
  • 如果在函数体外部使用 var,则会声明一个全局变量。
  • 通过全局 var 创建的这个属性不能使用 delete 操作符删除
  • 使用 var 多次声明同名变量是合法的
  • 在使用 var 声明变量时,该声明会被提高(或提升)到包含函数的顶部。、

# 6、解构赋值

let [x, y] = [1, 2]; // 相当于 let x=1, y=2
[x, y] = [x + 1, y + 1]; // 相当于 x = x + 1, y = y + 1
[x, y] = [y, x]; // 交换两个变量的值
[x, y]; // => [3,2]: 递增和交换后的值
1
2
3
4
上次更新: 12/11/2022, 8:56:18 PM