El operador + + en javascript

Cuando tengo uno más, recibo la respuesta incorrecta, por ejemplo

var b = [069]; var total = 0; total = total + b console.log(total) // total = 069 

Sin embargo, cuando agrego un segundo más, la ecuación se ve así.

 total = total + + b // total = 69 

Recibo la respuesta correcta de 69. Lo anterior es solo un ejemplo simplificado de mi problema.

Esto funciona bien, sin embargo, mientras uso JSHint recibo una advertencia que dice

 confusing pluses 

¿Cómo puedo obtener la respuesta correcta sin utilizar el + +? Además, ¿cómo se llama este operador?

Publicar mi comentario como respuesta.

+ delante de una variable lo convertiría a un número si estoy en lo correcto.

Prueba esto en tu consola:

"5" devolvería "5" (cadena), donde

+"5" devolvería 5 (número).

Podría usar total = parseInt(total) + parseInt(b); para obtener un resultado correcto, ya que parseInt() intentaría hacer un número con cualquier parámetro de entrada que obtenga.

Teóricamente, podría simplemente analizar el total como un número, pero sería propenso a un error como "1" + "0" = "10" resultando en 10 , que matemáticamente debería ser 1 .

Javascript desafortunadamente hace muchas conversiones implícitas … con tu código

 b + [69] 

lo que sucede es que [69] (una matriz que contiene el número 69 ) se convierte en una cadena, y se convierte en "69" . Esto luego se concatena a b que también se convierte en este caso a una cadena "0" . De "069" el resultado "069" .

Sin embargo, si agrega otro + unario delante de la matriz, la cadena vuelve a convertirse en un número y obtiene un resultado numérico agregado a b .

 0 + [69] → 0 + "69" → "0" + "69" → "069" 0 + + [69] → 0 + + "69" → 0 + 69 → 69 

Las reglas exactas son bastante complejas, pero puede ser productivo con Javascript simplemente considerando la forma simplificada que para binario + :

  • Si ambos son números el resultado es sum numérica.
  • De lo contrario, se convierten tanto en cadena como en concatenación.

Una cosa que es algo sorprendente es que la conversión implícita de una matriz a una cadena es solo la conversión de elementos a una cadena que agrega "," entre ellos como separador.

Esto significa que la matriz de un elemento [1] se convierte a "1" … e implica consecuencias aparentemente locas como [1] == 1 .