Al realizar +, -, *, /, == ,! =, etc. En JavaScript, si los tipos de valor en ambos lados del operador son inconsistentes con el tipo esperado, JavaScript convertirá los valores en ambos lados del operador en el tipo esperado antes de realizar las operaciones. Cuando el tipo de valor esperado es String, JavaScript convertirá el valor en cadena; Cuando el tipo de valor esperado es el número, JavaScript convertirá el valor en número (si no puede convertirse en un valor numérico, devolverá NAN). Por ejemplo:
La copia del código es la siguiente:
console.log (10 + "gatos"); // 10 gatos
console.log (10 * "gatos"); // nan, "gatos" se convertirán en nan
console.log (10 + "2"); // 102
console.log (10 - "2"); // 8
console.log (10/"2"); // 5
console.log (10 * "2"); // 20
console.log (10 * "2"); // 20
console.log ("10" * "2"); // 20
Reglas de conversión de tipo de valor
Para las reglas de conversión de valor en JavaScript, consulte la Tabla 3-2. Conversiones de tipo JavaScript en el libro "JavaScript La guía definitiva". Algunos de los lugares más notables son:
1. El resultado es NAN después de la conversión indefinida al número.
2. El resultado es 0 después de convertir nulo a número.
3. El resultado es 0 después de convertir la cadena vacía "" en el número.
4. El resultado es "0" después de convertir-0 a la cadena.
5. El resultado es 0 después de convertir la matriz vacía [] en número.
6. La matriz con solo un número de miembro (como [9]) se convierte en número y el resultado es el valor de número (9).
Cuando JavaScript convierte la cadena en número, hay dos reglas más interesantes:
1. JavaScript eliminará los caracteres en blanco al principio y al final de la cadena antes de convertirla, por lo que las cadenas como "42" se pueden convertir con éxito al número 42.
2. Después de eliminar los caracteres en blanco al principio y al final, si la cadena todavía contiene caracteres no numéricos, la cadena se convertirá en NAN. Por ejemplo: "3 M" se convertirá en NAN.
Ejemplo:
La copia del código es la siguiente:
console.log (10 * "3"); // 30
console.log (10 * "3 m"); // nan, "3 m" se convertirá en nan
Conversión de tipo de valor y comparación
En JavaScript, el uso de un operador igual (==) implica una conversión de tipo de valor: si los tipos de valor en ambos lados del operador == son inconsistentes, entonces JS los convertirá en tipos consistentes antes de hacer juicios. Tenga cuidado de que dos tipos diferentes de valores puedan ser equivalentes después de la conversión de tipo, pero esto no significa que el resultado de usar el operador == para ellos debe ser cierto. Un ejemplo simple está indefinido y falso: el resultado de indefinido después de convertir indefinido a tipo booleano es exactamente falso, pero de hecho el resultado de un falso indefinado es falso.
Conversión de tipo explícito
La conversión de tipo automática con JavaScript es muy conveniente, pero puede causar fácilmente problemas como la capacidad de mantenimiento del código. Para hacer que el código del programa sea más claro y menos ambigüedad, a veces se usan conversiones de tipo explícita en los programas JS:
La copia del código es la siguiente:
Número ("3") // 3
Cadena (false) // "False"
Booleano ([]) // verdadero
En la mayoría de los casos, el resultado de la conversión de tipo explícito es consistente con el resultado de la conversión de tipo automático JS; Pero hay un caso especial: cuando nulo o indefinido se convierte automáticamente en objeto, JS lanzará un error TipoError; Pero cuando nulo o indefinido se convierte explícitamente en objeto, JS devolverá un objeto vacío:
La copia del código es la siguiente:
console.log (objeto (indefinido)); // objeto vacío
console.log (objeto (nulo)); // objeto vacío
Al mismo tiempo, si el tipo especificado por la conversión explícita es diferente del tipo especificado por la conversión automática de JS, los resultados obtenidos también son diferentes. Por ejemplo, el resultado de == falso mencionado anteriormente anteriormente es falso; Si el tipo de conversión se especifica explícitamente como booleano, el resultado es verdadero:
La copia del código es la siguiente:
console.log (undefined == falso); // falso
console.log (boolean (indefinido) == boolean (falso)); // verdadero
Uso de la conversión de tipo automático
En JS, la conversión automática de tipos de valor se puede utilizar para lograr el mismo efecto que la conversión explícita a través de operadores, como:
La copia del código es la siguiente:
console.log (falso + ""); // "falso"
console.log (+falso); // 0
console.log (!! 3); // Verdadero