javascript复习:变量类型和计算

问题

  • typeof 能判断哪些类型
  • 何时使用 === 和 ==
  • 值类型和引用类型区别

补充知识: 变量类型

1. 变量类型(值类型,引用类型)

  • 值类型
    undefined
    string
    number
    boolean
    symbol
  • 引用类型
    null 特殊引用类型
    object
    array
    function

2. 深拷贝

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function deepClone(obj = {}) {
if (typeof obj !== 'object' || obj == null) {
return obj;
}
let result;
if (obj instanceof Array) {
result = [];
} else {
result = {};
}
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
result[key] = deepClone(obj[key])
}
}
return result;
}

问题解答:值类型和引用类型区别

值类型 栈
javascript复习:变量类型和计算_01

引用类型 堆
javascript复习:变量类型和计算_02

问题解答: typeof 能判断哪些类型

  • 识别所有值类型
    javascript复习:变量类型和计算_03
  • 识别 函数类型 function
  • 识别引用类型,但对于 null ,object,array, 都识别为Object;
    javascript复习:变量类型和计算_04

补充知识:变量计算

1. 类型转换

  • 字符串拼接
  • ==
  • if 语句和逻辑运算
运算符 “ + ”
1
2
3
4
const a = 100 + 10; // 110
const b = 100 + '10'; //10010
const c = true + '10' // true10
const d = false + true; // 1
运算符 “ == ”
1
2
3
4
5
100 == '100'   // true
0 == '' // true
0 == false // true
false == '' // true
null == undefined // true

2. falsely 变量,truly变量

以下是falsely变量,除此之外全是truly变量:

1
2
3
4
5
6
!!0 === false
!!NaN === false
!!'' === false
!!null === false
!!undefined === false
!!false === false

问题解答: 何时使用 === 和 ==

除了 ‘== null’,之外,其他都一律用 ‘===’,例如:

1
2
const obj = { x: 100 };
if (obj.a == null) {}