Capítulo 2 Tipos e cálculo de variáveis básicas de JS
1. Tipos de valor e tipos de referência
Segundo, cálculo variável e conversão de tipo
3. declaração se e cálculo lógico
3. Resumo das perguntas respondidas
1. Que tipos podem ser julgados?
2. Quando usar == Quando usar ===?
3. Qual é a diferença entre o tipo de valor e o tipo de referência?
Introdução ao tópico
- Que tipos podem ser julgados?
- Quando usar === Quando usar ==?
- Qual é a diferença entre o tipo de valor e o tipo de referência?
- Cópia profunda manuscrita
1. Noções básicas de JS
1. Tipos de valor e tipos de referência
Tipo de valor |
Tipo de referência |
deixe a = 100 deixe b = a a = 200 Console.log (b) // 100 |
deixe a = {idade: 20} deixe b = a b.age = 21 Console.log (a.age) // 21 |
Análise de pilha: (a pilha é de cima para baixo, a pilha é de baixo para cima)
Tipo de valor
Tipo de referência:
Tipos de valores comuns: número, indefinido, sequência, booleano, símbolo
Tipos de referência comuns: objeto, matriz Tipos de referência especiais: função nula, fu ()
2. O operador typeof
// determina todos os tipos de valor Deixe um; typeof a // ' indefinido ' const str = ' abc ' ; typeof str // ' string ' const n = 100; typeof n // ' número ' const b = verdadeiro; typeof b // ' booleano ' const s = símbolo ( ' s ' ); typeof s // ' símbolo ' |
// Pode julgar a função typeof console.log // ' função ' typeof function () {} // ' função ' |
// Pode identificar o tipo de referência (não pode continuar a identificar) typeof null // ' objeto ' typeof [ ' a ' , ' b ' ] // ' objeto ' typeof {x: 100} // ' objeto ' |
3. Cópia profunda
Cópia rasa
const obj1 = {
age: 20,
name: 'xxx',
address: {
city: 'beijing'
}
}
const obj2 = obj1
obj2.address.city = 'shanghai'
console.log(obj1.address.city) // shanghai
Cópia profunda
const obj1 = {
age: 20,
name: 'xxx',
address: {
city: 'beijing'
},
arr: ['a', 'b', 'c']
}
const obj2 = deepClone(obj1)
obj2.address.city = 'shanghai'
obj2.arr[0] = 'a1'
console.log(obj1.address.city) // beijing
console.log(obj1.arr[0]) // a
/**
* 深拷贝
* @param {Object} obj 要拷贝的对象
*/
function deepClone(obj = {}) {
if (typeof obj !== 'object' || obj == null) {
// obj 是 null ,或者不是对象和数组,直接返回
return obj
}
// 初始化返回结果
let result
if (obj instanceof Array) { // 判断是否为数组
result = []
} else {
result = {}
}
for (let key in obj) {
// 保证 key 不是原型的属性
if (obj.hasOwnProperty(key)) {
// 递归调用!!!
result[key] = deepClone(obj[key])
}
}
// 返回结果
return result
}
Segundo, cálculo variável e conversão de tipo
Concatenação de cadeias
const a = 100 + 10 // 110 可以使用100 + parseInt(‘10’)
const b = 100 + ‘10’ // 10010
const c = true + ‘10’ // true10
const d = 100 + parseInt(‘10’) // 110
2. == e ===
100 == ‘100’ // true
0 == ‘’ // true
0 == false // true
false == ‘’ // true
null == undeined // true
(== Tente torná-los iguais)
// 除了 == null 之外,其他都一律用 ===
Const obj = { x: 100 }
If (obj.a == null ) {}
// 相当于
// if (obj.a === null || obj.a === undefined) {}
3. declaração se e cálculo lógico
verdadeiramente variável: !! a === variável verdadeira (true após duas não operações)
Falsamente variável: !! a === variável falsa (falsa após duas não operações)
// 一下是falsely变量,除此之外都是truly变量
!! 0 === false
!! NaN === false
!! ‘’ === false
!! null === false
!! undefined === false
!! false === false
3. Resumo das perguntas respondidas
1. Que tipos podem ser julgados?
Identifique todos os tipos de valor
Função de reconhecimento
Determine se é o tipo de aplicativo
2. Quando usar == Quando usar ===?
Além de == null, todos os outros ===
3. Qual é a diferença entre o tipo de valor e o tipo de referência?
O tipo de valor é cópia profunda, o tipo de referência é cópia superficial
4. Cópia profunda manuscrita
Preste atenção ao tipo de valor de julgamento e tipo de referência
Preste atenção para determinar se é uma matriz ou um objeto
Use recursão
4. Resumo
1. Tipo de valor VS tipo de referência, modelo de pilha, cópia detalhada
2. Tipo de operador
3. Conversão de tipos, variáveis reais e falsas