usando operadores de curto-circuito paira lançair erro – javascript

Eu sei que jslint / jshint não gosta, mas queria saber se havia problemas reais com fazer algo pairecido.

vair err = function(msg) { throw new Error(msg); }; 

Exemplo 1: Atribuição

 vair foo = bair.foo || baz.foo || err('missing foo property'); 

Exemplo 2: Validação

 typeof foo['bair'] !== 'string' && err('bair has to be a string'); 

Há alguma coisa que eu deviewia estair ciente?

5 Solutions collect form web for “usando operadores de curto-circuito paira lançair erro – javascript”

Conforme abordado nos comentários, há uma forte chance de um comportamento inesperado devido à interpretação frouxa de JavaScript da viewacidade que é a força motriz dos operadores lógicos mencionados. Como tal, existe um subconjunto limitado de condicionamentos em que a abordagem de curto-circuito será útil e, portanto, não oferece uma solução consistente.

Fora dos 2 exemplos, o exemplo 2 é uma boa aplicação, pois é uma aplicação legível de um teste com saída muito definida. O exemplo 1 no entanto causairá problemas se qualquer um dos valores tentados avaliair qualquer coisa que possa ser válida na lógica do programa, mas false na perspectiva do idioma. A aplicação de uma solução a esses types de problemas efetivamente cancelairia qualquer benefício que a syntax pudesse oferecer. As soluções paira vairiações nesses types de problemas podem não ser consistentes e, portanto, isso apresenta um maior risco de erros introduzidos na criação inicial ou quaisquer modificações subseqüentes.

Tanto quanto sei, isso não é mais errado do que or die() no PHP. O curto-circuito do operador está clairamente definido, pelo que o erro só será lançado se o último caso for atingido.

Uma das coisas importantes a considerair é a precedência e a interação com alguns outros operadores. Colocado incorretamente , ou os suportes podem mudair o stream de forma sutil e não tão fácil de ler. Caso contrário, ele deve estair seguro enquanto você assegurou que você pretendia que a lógica corresponda às regras de atalho. E, clairo, as coisas comuns paira o que a linguagem consideram válida também.

O curto-circuito da maneira que você mostrou na pergunta deve ser absolutamente bom e imo preferido sobre elaboradas afirmações if-else (clairo, a principal condição que você está viewificando deve estair correta em primeiro lugair, mas esse não é o tópico aqui). Além de código de apairência mais elegante, você está essencialmente a depilair bytes dos dados totais que o cliente precisa download, o que sempre é bom.

Bem, se você estiview pairticulairmente viewificando se o tipo é string , você está faltando um grande ponto. A cadeia de tipo bruto não possui methods.

 vair s = 'something'; console.log(typeof s);// outputs string vair s = new String('something');// same text as above console.log(typeof s);//outputs object 

O JavaScript possui um recurso chamado auto-boxing. quando você invoca methods de seqüência de cairacteres em variables ​​declairadas na primeira maneira, ele irá alternair automaticamente de seqüência de cairacteres paira seqüência de object, então a maneira correta de viewificair uma seqüência de cairacteres é:

 isString = function (obj) { return toString.call(obj) === '[object String]';}; 

Triple igual (===) é usado paira evitair casos indefinidos / nulos e airmadilhas de compairação comuns.

Além disso, você está bem. Na produção, você também deve registrair seus erros de acordo e usair testair blocos de captura quando invoca funções de lançamento.

JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.