Aprendizaje de programación avanzada de JavaScript ① ¿Qué incluye JavaScript completo? ¿Cuáles son los usos, similitudes y diferencias de var, let y const? ¿Por qué es mejor utilizar el bucle let in? ¿Qué son indefinido, nulo y NaN respectivamente?

1. ¿Qué contiene JavaScript completo? ¿Qué quieren decir?

1.1 El JavaScript completo contiene tres partes

Core ECMAScript, modelo de objetos de documento DOM, modelo de objetos de navegador BOM

 

1.2 El significado de las tres partes de JavaScript

1.2.1 ECMAScript

ECMA-262 define la sintaxis, tipos, declaraciones, palabras clave, palabras reservadas, operadores y objetos globales de un idioma; ECMA-262 ha iterado muchas versiones. Por ejemplo, la sexta edición de ECMA-262 se conoce comúnmente como ES6.

ECMAScript es un lenguaje definido por ECMA-262 y es el nombre que se le da a un lenguaje que implementa todos los aspectos descritos en esta especificación.

JavaScript implementa ECMAScript.

1.2.2 Modelo de objetos de documento DOM

El modelo de objetos de documento (DOM) es una interfaz de programación de aplicaciones para utilizar XML extendido en HTML.

DOM abstrae toda la página en un conjunto de nodos jerárquicos.

<html>
	<head> 
		<title>Page Title</title>
	</head>
	<body>
		<p>Hello World</p>
	</body>
</html>

El código se puede representar como un conjunto de nodos jerárquicos a través de DOM.

1.2.3 Modelo de objetos del navegador BOM

El modelo de objetos del navegador (BOM), utilizado para admitir el acceso y la manipulación de las ventanas del navegador. Al utilizar la lista de materiales, los desarrolladores pueden controlar partes de la página distintas de las que muestra el navegador. El núcleo de la lista de materiales es el objeto Ventana, que representa una instancia del navegador.

2. ¿Cuáles son los usos, similitudes y diferencias de var, let y const?

2.1 Descripción general de similitudes y diferencias entre var, let y const

Variables declarables Alcance promoción variable declaración redundante Necesidad de inicializar variables. Inmutable
era todos los tipos alcance de la función × ×
dejar todos los tipos alcance del bloque × × × ×
constante todos los tipos alcance del bloque × ×

2.2 Detalles y uso de similitudes, diferencias y uso de var, let y const

2.2.1 Alcance

El alcance de var es el alcance de la función, es decir, una vez declarado en una función, se puede usar en toda la función.

El alcance de let y const es el alcance del bloque, es decir, si let está definido en {}, no se puede acceder a él fuera de {}.

A continuación se dan ejemplos de alcances var, let y const. Para las variables declaradas por var, puede ver que incluso si se declaran dentro de un bloque, se puede acceder a la función completa. Por supuesto, su alcance solo se limita a la función actual. prueba() entre.

function test() {
    if (true) {
        var a = "HelloWorld"
        console.log("块内声明:" + a)
    }
    console.log("块外:" + a)
}
test()
console.log("函数作用域外:" + a)

 Para las variables declaradas por let y const, solo se puede acceder a ellas en el bloque actual y no se puede acceder a ellas en el alcance de la función actual o fuera del alcance de la función.

function test() {
    if (true) {
      //const a = "HelloWorld"
        let a = "HelloWorld"
        console.log("块内声明:" + a)
    }
    console.log("块外:" + a)
}
test()
console.log("函数作用域外:" + a)

 

2.2.2 Promoción variable

Hay promoción de variables en var, es decir, el uso de var promoverá automáticamente las variables definidas por var a la parte superior del alcance de la función.

No hay promoción variable para let y const.

A continuación se ofrecen ejemplos de promoción de variables var, let y const. La promoción de variables var significa que las variables declaradas con esta palabra clave se promocionarán automáticamente a la parte superior del alcance de la función y no se informará ningún error, pero se mostrará indefinido.

console.log(a)
var a = "HelloWorld"
console.log(a)

 Es decir, la línea de código anterior es equivalente al siguiente código:

var a
console.log(a)
var a = "HelloWorld"

No hay promoción de variables para let y const. Si esta variable no se define antes de usarla, se informará directamente un error.

console.log(a)
let a = "HelloWorld"
// const a = "HelloWorld"

 2.2.3 Declaraciones redundantes

var se puede declarar de forma redundante, pero let y const no pueden declararse de forma redundante.

La declaración redundante se refiere a declarar repetidamente la misma variable varias veces, y var permite declaraciones redundantes.

var a = "1"
var a = "2"
var a = "3"
console.log(a)

 

 Let y const no permiten declaraciones redundantes e informarán directamente un error.

let a = "1"
let a = "2"
//const a = "1"
//const a = "2"
console.log(a)

 

 2.2.4 Inicialización de variables y modificaciones

 Cuando se declara una variable constante, la variable debe inicializarse y el valor constante no se puede modificar.

const a 

 

 

const a = 1;
	  a += 2;

 

 

3. ¿Por qué es mejor usar let en lugar de const o var en el bucle for?

3.1 Hay penetración variable en var y se producirán errores extraños al usar temporizadores.

3.1.1 Penetración variable

La llamada penetración variable se debe a que el alcance de var es el alcance completo de la función, y i definido a través de var se definirá en toda la función. En lugar de simplemente definirse en el cuerpo de este bucle.

for (var i = 0; i < 3; i++) {

}
console.log(i);

 

 

3.1.2 “Error” del temporizador

Al mismo tiempo, si se agrega un temporizador al ciclo y es necesario manipular el valor de i, entonces solo se puede obtener el valor de i que conduce al final del ciclo.

for (var i = 0; i < 3; i++) {
    setTimeout(() => { console.log(i) }, 0)
}

3.2 Const no permite modificaciones por definición, y se informará un error directamente cuando se use como i para el conteo de bucles.

for (const i = 0; i < 3; i++) {
}

 

 3.3 Usar let puede evitar perfectamente los tres problemas anteriores, por lo que es mejor usar let en el bucle for.

Cuando se usa let para definir i en un bucle for, las variables a las que hace referencia la función en el temporizador son nuevas variables declaradas por el motor JavaScript para cada iteración, en lugar de imprimir directamente el valor i al final, y el problema de la penetración de variables no ocurrirá en este momento. No actuaré fuera de la función.

for (let i = 0; i < 3; i++) {
    setTimeout(() => { console.log(i) }, 0)
}
console.log(i)

 

 

4. ¿Qué son Indefinido, Nulo y NaN respectivamente?

4.1 Indefinido

Cuando una variable se declara usando var o let pero no se inicializa, equivale a asignar un valor indefinido a la variable.

let a
var b
console.log(a)
console.log(b)

 

 

4.2 Nulo

El valor nulo representa un puntero de objeto nulo. Utilice typeof para devolver un objeto nulo.

console.log(typeof(null))

 

indefinido se deriva de nulo, ECMA-262 los define como superficialmente iguales, es decir, nulo == indefinido devolverá verdadero, pero por supuesto no son exactamente iguales.

console.log(undefined == null)
console.log(undefined === null)

 

 

4,3 NaN

NaN (no es un número) es un valor especial que se utiliza para indicar que la operación que se suponía debía devolver un valor falló. La división por 0, +0 o -0 devuelve NaN

Por ejemplo, 0/0 devolverá NaN y 3/0 devolverá Infinity.

console.log(0/0)
console.log(3/0)

 

NaN también aparecerá en situaciones extrañas al comparar tamaños.

console.log(NaN > 3);
console.log(NaN <= 3);
console.log(NaN == NaN);
console.log(NaN === NaN);
console.log(NaN != NaN);

NaN no es mayor que 3 ni igual a 3, ni es igual a sí mismo, ni es completamente igual a sí mismo.  

 

 

5. Operadores relacionales, ¿por qué aparece 3 > 23?

Después de ejecutar estas cuatro líneas de código, una línea devolverá falso, es decir, aparecerá un extraño "23 <3".

console.log("23" > "3");
console.log(23 > "3");
console.log("23" > 3);
console.log(23 > 3);

 

Cuando "23" y "3" son cadenas, sus códigos de caracteres se compararán gradualmente. El código 50 de "2" es menor que el código 51 de "3", lo que significa que se devolverá falso.

En otros casos, cuando contiene un valor numérico, la cadena se convertirá en un valor numérico y luego se comparará.

Supongo que te gusta

Origin blog.csdn.net/zujiasheng/article/details/126858300
Recomendado
Clasificación