Escribir en frente
Hoy quiero ver el conocimiento de los tipos de nodos y qué tipo de conocimiento quiero resumir. Vi un artículo en Google, pero el enlace original se ha ido. Saqué este artículo en la instantánea. Si el autor original tiene alguna pregunta, ¡contácteme!
¡Todo este artículo se basa en algunos JS, y los expertos lo saltarán automáticamente! No he escrito mucho sobre JS antes, y este aspecto es relativamente débil, por lo que también encontré problemas al escribir nodos. ¡Aquí hay un suplemento que yo sepa!
texto
La base de Node.js es JavaScript, el lenguaje de secuencias de comandos. Una característica común de la mayoría de los idiomas de secuencias de comandos es el "tipo débil".
A diferencia de PHP, incluso si hay nuevas variables en PHP, no hay necesidad de declararlas, mientras que JavaScript todavía necesita VAR para declararlas. Esta var cubre todos los tipos de significados como INT, String, Char, etc. en funciones C ++ e incluso.
Todo el contenido en este artículo y el siguiente artículo se editan utilizando VIM en Linux o Cygwin (si no, conviértelo en su propio método) y luego vea los resultados en la línea de comando.
Sintaxis básica
Declaración variable
En C/C ++, declaramos variables como esta:
`` `C ++
La copia del código es la siguiente:
void foo () {}
int a = 0;
char b = 'a';
flotante c = 1.0f;
void (*d) () = foo; /// <Olvidé si eso es lo que escribí, en resumen, es un puntero de función
Y en node.js se ve así:
`` `JavaScript
La copia del código es la siguiente:
función foo () {}
var a = 0;
var b = 'a';
var c = 1.0;
var d = foo;
Entonces, no importa qué tipo de variable sea, se resuelve con un VAR en Node.js.
Declaración de bucle
por ... yo
Esta declaración de bucle es básicamente la misma que C/C ++, ambos
`` `C ++
La copia del código es la siguiente:
para (int i = 0; i <foo; i ++)
{
// ...
}
Y dado que node.js es un tipo débil, solo necesita:
`` `JavaScript
La copia del código es la siguiente:
para (var i = 0; i <foo; i ++) {
// ...
}
para ... en
Esta es una declaración de bucle posterior a la forma, similar a la foreach de PHP.
Por ejemplo, tenemos un objeto JSON de la siguiente manera:
javascript
La copia del código es la siguiente:
var foo = {
"Hola Mundo",
"nodo": "js",
"Blahblah": "Bar"
};
En este momento, podemos usar para ... en To Bucle Through:
javascript
La copia del código es la siguiente:
para (varilla var en foo) {
console.log (clave + ":" + foo [clave]);
}
Si escribimos el siguiente comando en la línea de comando:
La copia del código es la siguiente:
$ node foo.js
El siguiente contenido se mostrará en la pantalla:
La copia del código es la siguiente:
Hola
: mundo
Nodo: JS
Blahblah: Bar
Consejo: De lo anterior, la declaración para ... en la declaración se usa para atravesar los nombres clave de los objetos JSON, las matrices y los objetos, sin proporcionar un recorrido clave de valor. Si desea obtener el valor clave, solo puede obtenerlo en forma de Foo [<nombre clave actual>]. Esto sigue siendo un poco diferente de PHP foreach.
Mientras ... haz, haz ...
No explicaré esto, no es una gran diferencia con respecto a otros idiomas. No es nada más que eso si hay una declaración variable, es suficiente usar var.
Operadores
+, -, *, /
Este es el caso con estos operadores, uno debe prestar atención a +. Puede actuar tanto en cadenas como en operaciones numéricas. Aunque los idiomas de tipo débil dicen que los tipos son débiles, los números a veces pueden aparecer en forma de cadenas, y las cadenas a veces pueden aparecer en forma de valores numéricos, pero cuando es necesario, aún necesita hablar sobre qué tipo es. Podemos usar el siguiente código para ver los resultados:
La copia del código es la siguiente:
var a = "1";
var b = 2;
console.log (a + b);
console.log (parseint (a) + b);
Aquí, ParseInt es una función incorporada de Node.js, que se utiliza para analizar una cadena en una variable de tipo int.
El resultado de la ejecución del código anterior es:
La copia del código es la siguiente:
12
3
Nota: El resultado de la primera consola.log es 12. Dado que A es una cadena, B también es agregada como una cadena por el sistema. El resultado es que las dos cadenas se pegan y se convierten en 12. El resultado de la segunda consola.log es 3 porque convertimos el primero en tipo int y agregamos dos variables de tipo int, es decir, agregar valores y, por supuesto, el resultado es 3.
==, == ,! = ,! ==
Aquí hay un punto para explicar que cuando la longitud de este operador lógico es 2 (== ,! =) solo determina si el valor externo es el mismo, pero no determina el tipo. como
La copia del código es la siguiente:
var a = 1, b = "1";
console.log (a == b);
El resultado de su salida es verdadero. Pero si agregamos un signo igual cuando hacemos juicios en el medio, entonces haremos un juicio estricto. Solo será cierto cuando el tipo y el valor son los mismos, de lo contrario será falso. Es decir
La copia del código es la siguiente:
var a = 1, b = "1";
console.log (a === b);
Cuando el resultado devuelto es falso, porque A es de tipo int, mientras que B es una cadena.
Por cierto, hablemos sobre la declaración condicional. De hecho, si aquí no es diferente de otros idiomas, es solo un problema de dos signos iguales y tres signos iguales para varios operadores lógicos. Así que no daré mucha declaración agotadora.
tipo de tono
Aquí lo consideraré como un operador en lugar de una función.
La función de este operador es juzgar el tipo de variable y devolverá una cadena, es decir, el nombre del tipo. Sabrá si ejecuta el siguiente código:
La copia del código es la siguiente:
función foo () {}
var a = 0;
Var B = 'shh ~ La sopa de flores de huevo está durmiendo. ';
var c = 1.0;
var d = foo;
var e = {"a": a};
var f = [1, 2, 3];
var g = nulo;
var h = indefinido;
console.log (typeOf a);
console.log (typeof b);
console.log (typeof c);
console.log (typeof d);
console.log (typeof e);
console.log (typeof f);
console.log (typeof g);
console.log (typeof h);
El resultado de la ejecución aquí será:
La copia del código es la siguiente:
número
cadena
número
función
objeto
objeto
objeto
indefinido
nulo, indefinido, nan
En JavaScript, hay tres valores especiales, como se muestra en el título. Todos pueden estar familiarizados con el primero. También hay C/C ++, pero está en mayúscula, y su esencia es una.
`` `C ++
Definir nulo 0
En JavaScript, los significados de estos tres valores son diferentes.
### nulo ###
NULL es un objeto especial, que significa más o menos vacío. Por ejemplo:
var a = nulo;
Todos pueden entenderlo, así que no lo explicaré. Pero a diferencia de C/C ++, este nulo no es igual a 0.
### indefinido ###
Lo que esto significa es que esta variable no se declara. Para distinguir mejor a NULL, nuestro código de muestra es el siguiente:
`` `JavaScript
La copia del código es la siguiente:
var a = {
"foo": nulo
};
console.log (a ["foo"]);
console.log (a ["bar"]);
En el código anterior, hacemos que el valor de un ["foo"] vacío, es decir, nulo. Y no se declara en absoluto, ni siquiera está vacío. Todos deberían haber adivinado los resultados de la salida:
La copia del código es la siguiente:
nulo
indefinido
Yaya
Este es un valor vacío, un número especial. Su nombre completo no es un número. Es un poco extraño. Puede entenderlo como una variable de tipo número que no es una forma numérica, o una variable de tipo de número con errores.
A menudo ocurre cuando los errores de operación numérica de punto flotante (como dividir por 0), o incluso el usuario puede hacer una variable igual a Nan por sí mismo para devolver un valor de error para que todos sepan que la función ha tenido un error en funcionamiento.
Pequeño misceláneo
Las otras declaraciones restantes son similares a otros idiomas existentes, como Break, Switch, continúan, etc.
Tipo de variable
Esta sección habla principalmente de objetos JavaScript, y otros tipos son casi los mismos.
Tipo básico
Los tipos básicos contenidos en Node.js son casi los siguientes:
número
cadena
booleano
formación
Los primeros tres tipos se pueden asignar directamente, y la asignación de matriz es solo una asignación de referencia. Si se cambia un cierto valor en una nueva variable, el valor de la variable antigua también cambiará. Puede probar directamente el siguiente código:
javascript
var foo = [1, 2, 3];
bar bar = foo;
bar [0] = 3;
console.log (foo);
Resulta en:
javascript
[3, 2, 3]
En otras palabras, si una matriz se copia en una nueva matriz, no puede usarse para asignar valores directamente, pero debe ser "profundamente copiado".
Aquí tenemos que hablar sobre las tres formas de crear una matriz.
El primer tipo:
javascript
La copia del código es la siguiente:
var dog = new Array ();
perro [0] = "shh ~";
perro [1] = "Sopa de flores de huevo";
perro [2] = "dormir";
El segundo tipo:
javascript
La copia del código es la siguiente:
var dog = new Array ("shh ~", "sopa de flores de huevo", "durmiendo");
El cuarto tipo:
javascript
La copia del código es la siguiente:
var dog = [
"Shh ~",
"Sopa de flores de huevo",
"Durmiendo"
];
Personalmente prefiero la tercera forma de escribir, que es relativamente conciso.
Objetos JSON
Aquí saco el objeto JSON por separado en lugar de clasificarlo como un objeto JavaScript. Si creo que soy un poco engañoso, puedo omitir esta sección directamente.
Mi distinción entre objetos JSON y objetos JavaScript es si se usa solo para almacenar datos, en lugar de instanciación de una clase. De hecho, la esencia de JSON es la notación de objeto JavaScript.
Para obtener más información sobre JSON, por favor, Encyclopedia usted mismo.
Declarar un objeto JSON en Node.js es muy simple:
javascript
La copia del código es la siguiente:
var dog = {
"pre": "shh ~",
"Sub": {
"Nombre": "Sopa de flores de huevo",
"Actuar": "durmiendo",
"Tiempo": 12
},
"Suf": ["Dije", "está durmiendo", "está durmiendo"]
};
Hay dos formas de obtener el valor clave de un cierto nombre clave en un objeto JSON. El primero es conectarlo con puntos, y el segundo es usar soportes:
javascript
La copia del código es la siguiente:
perro
.pre;
perro ["pre"];
Nota: Cuando se usa puntos anteriores, la clave en JSON se sigue directamente. Si trata la clave como una variable, solo puede probarla con el perro [clave]: ahora puede probarla usted mismo y usarlo para ... en atravesar el objeto JSON anterior. No olvides usar typeof ~
La base de una clase (objeto)
Estrictamente hablando, la clase de nodo.js no puede considerarse una clase. De hecho, es solo una colección de funciones, agregando algunas variables de miembros. Su esencia es en realidad una función.
Sin embargo, en aras del sentido común, lo llamaremos "clase" a continuación y más tarde, y la instancia se llama "objeto".
Debido a que una clase tiene muchas funciones, o su esencia es una función, podemos hablar sobre los conceptos básicos de la función cuando no tenemos cuidado.
Declaración e instanciación de clases
Declarar una clase es muy simple, no te rías:
javascript
función foo () {
// ...
}
Ok, hemos escrito una clase Foo.
¿Verdadero o falso? ! real.
¿No lo crees? Si no lo cree, puede escribir un código y leerlo:
javascript
bar bar = new foo ();
No lo mire como una función, si se escribe en tal forma (nueva), es una instanciación de esta clase.
Y este llamado foo () es en realidad el constructor de esta clase foo ().
Variables de miembros
Hay dos buenas formas de obtener variables de miembros.
El primero es usar esto. <Nombre variable> en el constructor de clases o en cualquier constructor. Puede declarar una variable de miembro en cualquier momento, y no afectará el uso exterior. De todos modos, incluso si lo usa cuando no se declara, habrá un indefinido para apoyarlo. Entonces este es el primer método:
La copia del código es la siguiente:
javascript
función foo () {
this.hello = "mundo";
}
Nota: Esta es la variable miembro de la clase de llamada solo cuando se agrega esto, de lo contrario es solo una variable local en la función. Es necesario distinguir si existe el alcance de acción de esta variable.
El segundo método es declararlo fuera del constructor o cualquier función miembro, y su formato es <Nombre de clase> .prototype. <Nombre variable>::
javascript
La copia del código es la siguiente:
función foo () {
// ...
}
foo.prototype.hello = "mundo";
No importa cuál del método anterior sea una declaración de variables miembros, podemos ver el efecto:
javascript
La copia del código es la siguiente:
bar bar = new foo ();
console.log (bar.hello);
Incluso puede modificar esta clase como esta:
javascript
La copia del código es la siguiente:
función foo () {
this.hello = "mundo";
}
foo.prototype.hello = "Sopa de flores de huevo";
Luego use el código anterior para emitirlo.
Piense por qué la producción es el mundo en lugar de la sopa de huevo.
Constructor
Hemos dicho antes que Foo () es en realidad un constructor. Entonces, obviamente, podemos pasar parámetros al constructor, por lo que tenemos el siguiente código:
javascript
La copia del código es la siguiente:
// Código 2.1
función foo (hola) {
if (hola === indefinido) {
this.hello = "mundo";
} demás {
this.hello = hola;
}
}
Vemos un juicio extraño al respecto si (hola === indefinido). ¿De qué sirve este juicio? La primera posibilidad es que el desarrollador haya enviado especialmente un dolor indefinido. En este momento, está indefinido.
Hay otra situación. Dijimos desde el principio que JavaScript es un lenguaje de tipo débil. De hecho, no es solo un tipo débil, sino que sus parámetros de transmisión también son muy irremediables. Puede aprobar más o menos (siempre que se asegure de que el programa no comete ningún error cuando pasa más o menos o menos), está bien en principio. Los parámetros de múltiples pases se ignorarán automáticamente, mientras que los parámetros de pocos pases se complementarán con indefinido.
Solo mire el siguiente código y comprenderá:
javascript
La copia del código es la siguiente:
// Conecte el código 2.1 en
var bar1 = new foo ();
var bar2 = new foo ("sopa de flores de huevo");
Por favor, envíe dos variables de Hello Barly, y encontrará que uno es mundo y que el otro es sopa de huevo. Obviamente, cuando se declaró nuestro primer Bar1, fue considerado automáticamente como Node.js:
javascript
La copia del código es la siguiente:
var bar1 = new foo (indefinido);
Entonces hay un dicho que es mundo.
También en este constructor, vemos que el parámetro pasado es Hello, y hay una variable miembro en esta clase que es esta. Sin embargo, hemos dicho antes que el alcance es diferente cuando hay esto y esto no. Ese parámetro solo se usa en el constructor, mientras que el de esto es una variable miembro. Use esto para distinguirlos de inmediato, para que no importa incluso si el mismo nombre lo es.
Funciones para miembros
Declaración de la función de miembro
La declaración de una función miembro es similar al segundo método de declaración de una variable miembro, es decir, <class name> .prototype. <Function name> = <s function>;
javascript
La copia del código es la siguiente:
// Conecte el código 2.1 en
función sethello (hola) {
this.hello = hola;
}
foo.prototype.sethello = Sethello;
Bar1.Sethello ("Cake de huevo");
Como el código anterior es obvio, implementamos la función Sethello de la clase FOO, a través del cual podemos modificar el valor de Foo.hello.
Pero, ¿no es un poco problemático escribir así? A continuación, hablaré sobre una característica importante de las funciones de JavaScript.
★ Funciones anónimas ★
Muchas veces, algunas de nuestras funciones solo se hacen referencia o se les llama en un solo lugar, por lo que vale la pena darle un nombre a esta función, y no hay necesidad, por lo que podemos escribir esta función temporal y directamente a la persona que la hace referencia a que lo haga referencia, y la persona que lo llama a él para llamarlo. Por lo tanto, la función puede omitir el nombre de la función, como:
javascript
La copia del código es la siguiente:
función (hola) {
this.hello = hola;
}
¿En cuanto a cómo citarlo o llamarlo? Si se debe citar la clase anterior, se escribe así:
javascript
La copia del código es la siguiente:
foo.prototype.sethello = function (hello) {
this.hello = hola;
}
Este método de escritura es el mismo que la declaración de la función miembro y guarda mucho código. Y, de hecho, básicamente la declaración de funciones de miembros de la clase se declara en esta forma de funciones anónimas.
¿En cuanto a cómo hacer que se llamen funciones anónimas? Esto generalmente se escribe así cuando se pasa en una función que solo se llama por una determinada función.
Por ejemplo, tenemos un prototipo de una función:
javascript
La copia del código es la siguiente:
/**
* Pasaremos en dos variables A y B,
* Después de calcular el valor de A+B, entregárselo a func (num)
* Ir a la salida
*/
función sumab (a, b, func) {
var c = a + b;
func (a, b, c);
}
Por ejemplo, tenemos dos versiones de funciones de salida, una es la salida china y la otra es la salida en inglés. Entonces, si no usamos funciones anónimas:
javascript
La copia del código es la siguiente:
función zh (a, b, suma) {
El valor de console.log (a + " +" + b + "es:" + suma);
}
función en (a, b, suma) {
console.log (a + "más" + b + "es" + suma);
}
Sumab (1, 2, zh);
Sumab (3, 4, en);
Ejecute este código una vez, y la salida será:
El valor de 1 + 2 es: 3
3 más 4 es 7
Si dicho código está en forma de funciones anónimas, será:
javascript
La copia del código es la siguiente:
sumab (1, 2, función (a, b, suma) {
El valor de console.log (a + " +" + b + "es:" + suma);
});
sumab (3, 4, función (a, b, suma) {
console.log (a + "más" + b + "es" + suma);
});
Este formulario generalmente se usa en las funciones de devolución de llamada. El mecanismo de devolución de llamada es la esencia de Node.js o JavaScript. Lo presentaré en futuros capítulos.
Cómo declarar la función anónima en la declaración de la función del miembro
Aunque he hablado de eso en la sección anterior, volveré a hablar sobre eso.
Por lo general, cuando declaramos una función de miembro de la clase, usamos funciones anónimas para declararla, porque de todos modos, esa función es solo una función miembro de esta clase y no se referenciará ni se les llamará por separado en otros lugares, por lo que el siguiente código está disponible:
javascript
La copia del código es la siguiente:
// Conecte el código 2.1 en
foo.prototype.sethello = function (hello) {
this.hello = hola;
}
De esta manera, tenemos la función Sethello en la clase FOO.
2.3.4. Aleatoriedad de clases
Esta es mi tontería otra vez. La llamada aleatoriedad de clases significa que en JavaScript puede modificar su clase en cualquier lugar, lo que tiene ciertas similitudes con Ruby.
Por ejemplo, la cadena es en realidad una clase, con variables miembros como la longitud y las funciones de los miembros como IndexOF y Substr. Pero si creemos que algunas partes de esta cadena no son perfectas y queremos agregar nuestro propio método, entonces podemos agregarle una función donde desee, como:
javascript
La copia del código es la siguiente:
String.prototype.sb = function () {
var newsstr = "";
para (var i = 0; i <this.length; i ++) {
if (i % 2 === 0) Newsr += "S";
else Newsr += "B";
}
Return Newsr;
};
El significado de esta función es llenar una cadena para convertirla en la encarnación de SB.
Vamos a probarlo:
La copia del código es la siguiente:
var str = "shh ~ sopa de flores de huevo está durmiendo";
console.log (str.sb ());
Obtendrá el siguiente resultado:
sbsbsbsbsbs
Si dices "shhh ~ sopa de flores de huevo está durmiendo". Su computadora te regañará por ser un tonto cuatro veces y medio. (Aplastarlo rápidamente)
3. Adjunto
3.1. Copia profunda
La llamada copia profunda es crear una nueva matriz u objeto usted mismo, y copiar manualmente los valores de la variable de tipo básico en la matriz o objeto de origen uno por uno, en lugar de simplemente tomar las referencias a la matriz o objeto de origen. Entonces esto implica una llamada recursiva o algo así.
A continuación se muestra una función de copia profunda que implementé. Puede escribir uno propio y agregarlo a su propia base de conocimiento de nodo.js.
javascript
La copia del código es la siguiente:
function cloneObject (src) {
var dest = {};
for (clave var en src) {
if (typeof src === "objeto") dest [key] = cloneObject (src [key]);
else Dest [Key] = Src [Key];
}
regresar des;
}