diff --git a/locale/pt-br/knowledge/javascript-conventions/what-are-truthy-and-falsy-values.md b/locale/pt-br/knowledge/javascript-conventions/what-are-truthy-and-falsy-values.md new file mode 100644 index 0000000000000..cbc8f59e5058a --- /dev/null +++ b/locale/pt-br/knowledge/javascript-conventions/what-are-truthy-and-falsy-values.md @@ -0,0 +1,88 @@ +--- +date: '2011-08-26T10:08:50.000Z' +tags: + - truthy + - falsy + - types + - coercion +title: 'O que são valores "truthy" e "falsy"?' +difficulty: 4 +layout: knowledge-post.hbs +--- + + + +JavaScript é uma linguagem fracamente tipada. Isso significa que diferentes tipos podem ser usados em operações e a linguagem tentará converter estes tipos até que a operação faça sentido. + + +```js +console.log("1" > 0); // true, "1" convertido em number +console.log(1 + "1"); // 11, 1 convertido em string +``` + + +A conversão de tipos é também aplicada quando os valores usados são de operação booleanas unárias, mais notavelmente em declarações. Se um valor for convertido para o boolean true, então é dito que é "truthy". Se convertido em falso chamamos de "falsy". + +```js +let myval = "value"; +if(myval) { + console.log("Este valor é truthy"); +} + +myval = 0; +if(!myval) { + console.log("Este valor é falsy"); +} +``` + + +Já que a maioria dos valores em javascript é truthy, por exemplo, objetos, arrays, a maioria dos números e strings, é mais fácil identificar todos os valores falsy. Eles são: + +```js +false // obviamente +0 // o único number considerado "falsy" +"" // uma string vazia +null +undefined +NaN +``` + + +Note que todos os objetos e arrays são truthy, ainda que sejam vazios. + + +Truthiness e Falsiness também entram em jogo com operadores lógicos. Quando usamos operadores lógicos AND/OR, os valores serão convertidos com base em truthiness ou falsiness e, em seguida, a expressão será resolvida para o último valor truthy. Regras de curto-circuito se aplicam. Aqui está um breve exemplo. + +```js +let first = "truthy", + second = "também truthy"; + +let myvalue = first && second; +console.log(myvalue); // "também truthy" + +first = null; +second = "truthy"; + +myvalue = first || second; +console.log(myvalue); // "truthy" + +myvalue2 = second || first; +console.log(myvalue2); // "truthy" + +let truthy = "truthy", + falsy = 0; + +myvalue = truthy ? true : false; +myvalue = falsy ? true : false; +```