Adição (+)
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
O operador de adição (+
) produz a soma de operandos numéricos ou concatenação de strings.
Experimente
Sintaxe
x + y
Descrição
O operador de adição está encarregado para duas operações distintas, adição numérica e concatenação de Strings. Ao avaliar, ele primeiro coage ambos os operandos para primitivos chamando a função do objeto [@@toPrimitive]()
()(com "default" como dica), e os métodos valueOf(), e toString(), nessa ordem. Em seguida, são testados os tipos dos dois operandos:
- Se um lado é uma string, o outro operando também é convertido em uma string e eles são concatenados.
- Se ambos forem BigInts, a adição de BigInt será executada. Se um lado for um BigInt, mas o outro não, um
TypeError
será lançado. - Caso contrário, ambos os lados são convertidos em números e a adição numérica é executada.
A concatenação de strings geralmente é considerada equivalente a literais de modelo ou String.prototype.concat(), mas não são. A adição força a expressão a uma chamada primitive , que chama valueOf()
em prioridade; por outro lado, literais de modelo e concact()
converte a expressão para uma string, que chama toString()
em prioridade. Se a expressão tiver o método @@toPrimitive
, a concatenação de strings o chama com "default" como dica, enquanto literais de modelo usam "string". Isso é importante para objetos que têm diferentes representações de string e primitivas — como Temporal, cujo método valueOf()
lança.
const t = Temporal.Now.instant();
"" + t; // Throws TypeError
`${t}`; // '2022-07-31T04:48:56.113918308Z'
"".concat(t); // '2022-07-31T04:48:56.113918308Z'
Você é aconselhado a não usar "" + x para executar a coerção de string.
Exemplos
Adição numérica
// Number + Number -> adição
1 + 2; // 3
// Boolean + Number -> adição
true + 1; // 2
// Boolean + Boolean -> adição
false + false; // 0
Concatenação de String
// String + String -> concatenação
"foo" + "bar"; // "foobar"
// Number + String -> concatenação
5 + "foo"; // "5foo"
// String + Boolean -> concatenação
"foo" + false; // "foofalse"
Especificações
Specification |
---|
ECMAScript Language Specification # sec-addition-operator-plus |
Compatibilidade de navegadores
BCD tables only load in the browser