Skip to main content

Command Palette

Search for a command to run...

JavaScript - Coerción de datos

Updated
3 min read
JavaScript - Coerción de datos

Se podría decir que coerción es la acción de forzar a que un objeto se comporte como si fuera de otro tipo. Sin lugar a dudas, éste es uno de los aspectos más interesantes de JavaScript. Al ser un lenguaje débilmente tipado y dinámico, no es necesario especificar el tipo de dato para las variables porque el tipo está asociado al valor (duck typing*), esto hace que en tiempo de ejecución podamos cambiar el valor de las variables sin ningún problema.

3 + 3                       //6
3 + "3"                    //33
"hello" + " world"         //"hello world"
"It's " + false            //"It's false"
"cafe" + {tipo: "cortado"} //"cafe" [object Object]

Una de las ventajas de esta característica, es que podemos comprobar la existencia de un objeto mediante su valor, por lo que JavaScript permite implementar muy fácil algunos principios OOP como la sobrecarga de métodos (overload), sobrescritura de métodos (override) y polimorfismo.

image.png

Duck Typing

El Duck Typing, en los lenguajes de programación, es una técnica para determinar si un objeto es una instacia de una determinada clase basándose únicamente en los métodos que implementa.

La idea tras este paradigma es sencillo: si el objeto analizado posée un cierto conjunto de propiedades características (o exclusivas) de un objeto determinado, es muy probable que se trate de ese mismo objeto.

«Si parece un pato, anda como un pato y hace ‘cuack’ como los patos, es un pato.»

Una de las herramientas que ofrece el lenguaje para aproximarnos es el comando typeof(), cuya sintaxis es la siguiente:

typeof operando;

// o

typeof (operando);

El operador typeof devuelve una cadena indicando el tipo de datos del operando.

Operador de igualdad ( == )

Este operador compara los valores que hay al lado izquierdo y derecho de el, cuando son del mismo tipo compara los valores y de ser iguales retorna true y de lo contrario false.

xyresultado
nullundefinedtrue
undefinednulltrue
numberstringx == toNumber(y)
stringnumbertoNumber(x) == y
booleananytoNumber(x) == y
anybooleanx == toNumber(y)
string, number, or symbolObjectx == toPrimitive(y)
Objectstring, number, or symboltoPrimitive(x) == y
otros casosfalse

ejemplos:

3 == "3" // true
true == 1 // true
2 == "two" // false

Operador de adición y sustracción

En el caso de la adición (+) si ambos lados de la operación son números, se realizará la operación matemática suma, de lo contrario, se concatenarán los valores de ambos lados como Strings. En el caso de la sustracción (-) siempre realizará la operación matemática restar, en el caso de que ambos lados no sean números, los strings y booleans son convertidos a números y se realiza la operación matemática, en otros casos el resultado será NaN (Not a Number).

Truthy y falsy

Un valor truthy es aquel que evaluado en un contexto booleano da como resultado true, del mismo modo, un valor falsy es aquel que evaluado en un contexto booleano da como resultado false, en JavaScript todos los valores son true excepto:

  • false
  • 0
  • ""
  • ''
  • null
  • undefined
  • NaN

Objetos

Caso {} + [] = 0

En este caso, lo que sucede es que los brackets vacíos al inicio {} son interpretados como bloque de código vacío, por lo cual son ignorados por JS.

{} + []
+[]                   //JS ignora el lado izquierdo de la operación
Number([])            //El lado restante es convertido a número
0                     //Valor resultante

Caso [] + {}

[] + {}
String([]) + String({}) //Ambos lados de la operación son convertidos a string para ser concatenados
'' + '[object Object]'  //Se concatenan los resultados
'[object Object]'       //Valor resultante