style negrita letra attribute javascript

javascript - negrita - title css



¿Qué es exactamente Coerción tipo en Javascript? (7)

Comencemos con una breve introducción para escribir sistemas que creo que lo ayudarán a comprender la idea general de la coerción de tipo.

El sistema de tipos de un lenguaje define reglas que nos dicen qué tipos de datos existen en ese idioma y cómo se pueden combinar utilizando diferentes operadores. Por ejemplo, una de esas reglas podría especificar que el operador más (+) solo actúa sobre los números. Estas reglas existen principalmente para evitar que te dispares en el pie. Pero, ¿qué sucede cuando el programador rompe esa regla en el programa? No hay nada que impida que el programador escriba {} + {} o “hello” + 5 en un programa, incluso si el lenguaje no cree que esas expresiones tengan sentido.

Lo que finalmente sucede en esas situaciones depende de qué tan estricto sea el lenguaje sobre sus reglas de tipo.

Un sistema de tipo de idiomas a menudo tiene una de dos posiciones sobre usted que rompe sus reglas:

  1. Di "¡Oye, eso no es genial!" E inmediatamente cuelga tu programa.
  2. Di "No puedo hacer nada con {} ... pero puedo hacer algo con números" e intento convertir {} a un número.

Los idiomas con sistemas tipo que toman la primera posición sobre sus reglas se denominan coloquialmente como idiomas "fuertemente tipados". Son estrictos sobre no dejar que rompas sus reglas. Aquellos que toman el segundo enfoque (como JavaScript) se conocen como idiomas "débilmente tipados" o "débilmente tipados". Claro, puede romper las reglas, pero no se sorprenda cuando convierta por la fuerza el tipo de datos que describió en su programa para cumplir con sus reglas. Ese comportamiento se conoce como ... (drum roll) ... escribe coerción .

Ahora veamos algunos ejemplos en JavaScript. Primero, comencemos con una expresión que no conduzca a la coerción de tipo.

5 + 5

Usando el operador + con dos números que es perfectamente válido. El programa tratará + como "agregar" y felizmente agregará los dos números. Sin conversión necesaria

Pero que pasa …

[] + 5

UH oh. En JavaScript, + puede significar agregar dos números o concatenar dos cadenas. En este caso, no tenemos ni dos números ni dos cadenas. Solo tenemos un número y un objeto. De acuerdo con las reglas de tipo de JavaScript, esto no tiene sentido lógico. Dado que es indulgente contigo al romper sus reglas, en lugar de chocar, trata de encontrarle sentido de todos modos. Entonces, ¿qué hace JavaScript? Bueno, sabe cómo concatenar cadenas, por lo que convierte tanto [] como 5 en cadenas y el resultado es el valor de cadena "5".

¿Cuál es el trato con los operadores de comparación == y === ? ¿Por qué hay dos operadores de comparación?

== no es inmune al comportamiento de conversión de tipo de JavaScript. Expresiones como 5 == “5” se evaluarán como verdaderas porque JavaScript intentará convertir una de ellas para que comparen el mismo tipo de datos.

En muchos casos, eso no es deseable porque probablemente desee saber si algunos datos con los que compara son de un tipo diferente para que pueda decidir qué hacer al respecto. Ahí es donde entra el operador === . Cuando use === , no se realizará ninguna conversión de tipo. Por lo tanto, la expresión 5 === “5” evaluará a falso.

¿Qué es exactamente coerción de tipo en Javascript?

Por ejemplo, sobre el uso de == lugar de === ?


En Python, si intentas agregar, digamos cadenas y enteros, obtienes un error:

>>> "hi" + 10 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: cannot concatenate ''str'' and ''int'' objects

Sin embargo, en JavaScript, no. El 10 se convierte en una cadena:

> "hi" + 10 "hi10"

"Tipo de coerción" es simplemente un nombre inapropiado para lo anterior. En realidad, ningún idioma tiene "tipos" en el sentido de Java o C u otros lenguajes con sistemas de tipo estático. La forma en que los idiomas tratan las interacciones entre los diversos valores no tipificados de forma estática es una cuestión de elección y convención.


La coerción de tipo significa que cuando los operandos de un operador son tipos diferentes, uno de ellos se convertirá a un valor "equivalente" del tipo del otro operando. Por ejemplo, si lo haces:

boolean == integer

el operando booleano se convertirá a un entero: false convierte en 0 , true convierte en 1. Luego se comparan los dos valores.

Sin embargo, si utiliza el operador de comparación no convertidor === , no se produce dicha conversión. Cuando los operandos son de tipos diferentes, este operador devuelve false , y solo compara los valores cuando son del mismo tipo.


Si el tipo de datos no es igual entre sí, entonces ocurre la coerción. como 3 == "3" o boolen == entero


déjame explicarte la coerción de tipo con el siguiente ejemplo

Tipo Coerción significa que el Javascript automáticamente (sobre la marcha) convierte una variable de un tipo de datos a otro

Ej: 123 + "4" generalmente genera un error, pero en Javascript debido a la coerción de tipo, resulta en 1234 una cadena

if(23 == "23"){ console.log(" this line is inside the loop and is executed "); }

En el código anterior, debido a la coerción de tipo: JavaScript cree que 23 (número) y "23" (cadena) son lo mismo. esto hace que la condición sea verdadera e imprime console.log

En el otro caso

if(23 === "23"){ console.log(" this line is inside the loop and is NOT executed"); }

En === caso Javascript no hace Coerción de tipo, y como 23 es un número y "23" es Cadena y debido a === estos dos tipos de datos son diferentes y eso lleva a la condición de falso. No imprime el console.log

En palabras simples

En este caso = es un operador de asignación - que asigna valores tales como var a = 3; , etc.

(a continuación, los operadores son para la comparación)

En este caso, == Javascript convierte / coacciona el tipo de datos a otro y luego lo compara.

En este caso, === Javascript no convierte / coacciona el tipo de datos

Para evitar errores y para la depuración se usa principalmente ===

Por favor, hágame saber la precisión de la información anterior.


a == b significa que javascript evaluará a contra b función de si los valores pueden evaluarse por igual. Por ejemplo, false == 0 evaluará true porque 0 es también el valor de Boolean false. Sin embargo, false === 0 evaluará falso porque estrictamente comparar, 0 no tiene el mismo valor físico que falso. Otro ejemplo es false == '''' Así que básicamente comparación suelta vs. comparación estricta, porque javascript es un lenguaje poco tipado. Es decir, javascript intentará convertir la variable en función del contexto del código, y esto tiene el efecto de hacer las cosas iguales si no se comparan estrictamente. php también tiene este comportamiento.


var str = ''dude''; console.log(typeof str); // "string" console.log(!str); // false console.log(typeof !str); // "boolean"

Ejemplo de una variable que se declara inicialmente como una cadena forzada a un valor booleano con! operador