Typeof data

Todos los datos en JS tienen dos interpretaciones, la real y la lógica, con lógica se refiere a si corresponde a un true o a un false.

// Tipos de datos en JS
undefined // vacio - undefined - es asignado por JS
null // vacio - object - es asignado por los desarrolladores
12312, NaN, Infinity, 2e232, 0.1231, 0 // number
'sadfasdf', `asdasd${number}`, "asdfasdf" // string 
[1,2,3,4,5] // arrays
{key1: 'value1', key2: 2} // objects
true, false // boolean
Symbol['propiedad'] // symbol

// para obtener el tipo de un dato es suficiente con usar typeof
typeof(NaN)  // number
typeof NaN   // number

Truthy or Falsy

// truthy
true // all is not falsy
-3, 0.5 // all numbers except 0
" " // all not empty strings
[] // empty or full arrays
{} // empty or full objects
// falsy
false
0
'' // empty strings
null
undefined

Convertion type

String(true) // 'true'
String(123) // '123'

Number('123') // 123
Number(true) // 1
Number('asdf') // NaN

Boolean('asd') // true
Boolean('') // false
Boolean(13) // true

Automatic Type Conversion

JS correrá casi cualquier sentencia que mandes para seguir con la aplicación, por lo que cuando un resultado no cuadra lo convertirá para que la operación continúe.

8 * null // 0 , convierte null en su operador logico y luego 
"5" - 1 // 4 , la resta solo existe en numeros
"5" + 1 // 51, porque esperaba concatenar
'five' * 2 // NaN, quiere multiplicar pero no hay manera de leer 'five' como un numero
false == 0 // true, su operador logico es el mismo

"200" * 1 // 200

Operadores lógicos

Cada valor lleva consigo una interpretación lógica, ya sea true o false o ninguna de las dos, y su operación consiste en comparar 2 parámetros o cambiar de un valor al otro

null == undefined // true, cualquier valor vacio es igual a otro vacio
null == 0 // false, pero vacio no es igual al valor numerico 0
NaN == NaN // false, es el unico valor negativo que no es igual a si mismo

0 == false // true
"" == false // true son falsos por la 'Automatic type conversion'

/** En comparacion de strings, 
 * se compara uno por uno en cada posicion, de izq a der
 * y se compara su valor en unicode 
 * */
'Z' < 'a' // true
'hola que hace' != 'hola que mira' // true
'hola que quiere' == 'hola mi vida' // false

/** Si no deseas la Automatic type conversion */
//===, !==
'' === false // false
null === undefined // false, recuerda que null es tipo objeto y undefined es su propio tipo

Unary Operators

// Operadores que manejan solo un parametro
typeof('x') // string
-(52) // -52
!(true) // false

Binary operator

// Comparan o manejan dos parametros
10 - 2  // 8
3 > 2 // true
3 < 2 // false

/** En comparacion de strings, se compara uno por uno en cada posicion, de izq a der, y se compara su valor en Unicode posicion por posicion*/
'Z' < 'a' // true
'hola que hace' != 'hola que mira' // true
'hola que quiere' == 'hola mi vida' // false

/** El unico valor que no es igual a si mismo es NaN */
NaN == NaN // false

Ternary Operator

// Solo recuerda, que el ternario no ejecuta el return dentro de él 
true ? 1 : 2 // 1
true ? 1 : 2 // true