tutoriais mais recente desenvolvimento web
 

JavaScript Erros comuns


Este capítulo destaca alguns erros comuns de JavaScript.


Acidentalmente Usando o operador de atribuição

Programas JavaScript pode gerar resultados inesperados se um programador usa acidentalmente um operador de atribuição (=) , em vez de um operador de comparação (==) em uma instrução if.

Isso if instrução retorna false (como esperado), porque x não é igual a 10:

var x = 0;
if (x == 10)
Tente você mesmo "

Isso if instrução retorna true (talvez não tão esperado), porque 10 é verdadeira:

var x = 0;
if (x = 10)
Tente você mesmo "

Isso if instrução retorna false (talvez não tão esperado), porque 0 é falsa:

var x = 0;
if (x = 0)
Tente você mesmo "

Uma atribuição sempre retorna o valor da atribuição.


Esperando Comparação solto

Em comparação regular, tipo de dados não importa. Esta declaração se retorna true :

var x = 10;
var y = "10";
if (x == y)
Tente você mesmo "

Em comparação rigorosa, tipo de dados não importa. Esta declaração se retorna false :

var x = 10;
var y = "10";
if (x === y)
Tente você mesmo "

É um erro comum esquecer que declarações switch usar comparação estrita:

Esta chave caso exibirá um alerta:

var x = 10;
switch(x) {
    case 10: alert("Hello");
}
Tente você mesmo "

Esta chave caso não exibirá um alerta:

var x = 10;
switch(x) {
    case "10": alert("Hello");
}
Tente você mesmo "

Confuso Adição & concatenação

Além é sobre a adição de números.

Concatenação é sobre a adição de cordas.

Em JavaScript ambas as operações usam o mesmo operador +.

Devido a isso, a adição de um número como um número irá produzir um resultado diferente da adição de um número como uma cadeia:

var x = 10 + 5;          // the result in x is 15
var x = 10 + "5";        // the result in x is "105"
Tente você mesmo "

Quando a adição de duas variáveis, pode ser difícil de prever o resultado:

var x = 10;
var y = 5;
var z = x + y;           // the result in z is 15

var x = 10;
var y = "5";
var z = x + y;           // the result in z is "105"
Tente você mesmo "

Incompreensão flutuadores

Todos os números em JavaScript são armazenados como 64-bits números de ponto flutuante (flutua).

Todas as linguagens de programação, incluindo JavaScript, têm dificuldades com valores de ponto flutuante precisas:

var x = 0.1;
var y = 0.2;
var z = x + y            // the result in z will not be 0.3
if (z == 0.3)            // this if test will fail
Tente você mesmo "

Para resolver o problema acima, ele ajuda a multiplicar-se e dividir:

Exemplo

var z = (x * 10 + y * 10) / 10;       // z will be 0.3
Tente você mesmo "

Quebrando uma String JavaScript

JavaScript permitirá que você quebrar uma declaração em duas linhas:

exemplo 1

var x =
"Hello World!";
Tente você mesmo "

Mas, quebrando uma instrução no meio de uma corda não vai funcionar:

exemplo 2

var x = "Hello
World!";
Tente você mesmo "

Você deve usar uma "barra invertida" se você deve quebrar a declaração em uma string:

exemplo 3

var x = "Hello \
World!";
Tente você mesmo "

extravio Semicolon

Por causa de um ponto e vírgula deslocada, este bloco de código será executado independentemente do valor de x:

if (x == 19);
{
    // code block 
}
Tente você mesmo "

Quebrando uma instrução de retorno

É um comportamento do JavaScript padrão para fechar automaticamente uma instrução no final de uma linha.

Devido a isso, estes dois exemplos irá devolver o mesmo resultado:

exemplo 1

function myFunction(a) {
    var power = 10 
    return a * power
}
Tente você mesmo "

exemplo 2

function myFunction(a) {
    var power = 10;
    return a * power;
}
Tente você mesmo "

JavaScript também permitirá que você quebrar uma declaração em duas linhas.

Devido a isto, o exemplo 3, também irá devolver o mesmo resultado:

exemplo 3

function myFunction(a) {
    var
    power = 10; 
    return a * power;
}
Tente você mesmo "

Mas, o que vai acontecer se você quebrar a instrução de retorno em duas linhas como este:

exemplo 4

function myFunction(a) {
    var
    power = 10; 
    return
    a * power;
}
Tente você mesmo "

A função retornará indefinido!

Por quê? Porque JavaScript pensa que você queria dizer:

exemplo 5

function myFunction(a) {
    var
    power = 10; 
    return;
    a * power;
}
Tente você mesmo "

Explicação

Se uma declaração estiver incompleta, como:

var

JavaScript vai tentar completar a instrução, lendo a linha seguinte:

power = 10;

Mas desde que esta declaração é completa:

return

JavaScript irá fechá-lo automaticamente assim:

return;

Isso acontece porque fechamento (fim) declarações com ponto e vírgula é opcional em JavaScript.

JavaScript irá fechar a instrução de retorno no final da linha, pois é uma instrução completa.

Nunca quebrar uma instrução de retorno.


Acesso às matrizes com índices nomeados

Muitas linguagens de programação suportam arrays com índices nomeados.

Arrays com índices chamados são chamados de matrizes associativas (ou hashes).

O JavaScript não suporta matrizes com índices nomeados.

Em JavaScript, matrizes usar índices numerados:

Exemplo

var person = [];
person[0] = "John";
person[1] = "Doe";
person[2] = 46;
var x = person.length;         // person.length will return 3
var y = person[0];             // person[0] will return "John"
Tente você mesmo "

Em JavaScript, objetos usar índices nomeado.

Se você usar um índice chamado, quando aceder a um array, JavaScript irá redefinir a matriz para um objeto padrão.

Após a redefinição automática, métodos e propriedades de Array irá produzir resultados indefinidos ou incorretas:

Exemplo:

var person = [];
person["firstName"] = "John";
person["lastName"] = "Doe";
person["age"] = 46;
var x = person.length;         // person.length will return 0
var y = person[0];             // person[0] will return undefined
Tente você mesmo "

Terminar uma definição de matriz com uma vírgula

Incorreta:

points = [40, 100, 1, 5, 25, 10,];

Alguns motores de JSON e JavaScript irá falhar, ou se comportar de forma inesperada.

Corrigir:

points = [40, 100, 1, 5, 25, 10];

Terminar uma definição de objeto com uma vírgula

Incorreta:

person = {firstName:"John", lastName:"Doe", age:46,}

Alguns motores de JSON e JavaScript irá falhar, ou se comportar de forma inesperada.

Corrigir:

person = {firstName:"John", lastName:"Doe", age:46}

Indefinida não é nulo

Com JavaScript, null é para objetos, indefinido é para variáveis, propriedades e métodos.

Para ser nulo, um objeto tem que ser definido, caso contrário ele será indefinido.

Se você quiser testar se existe um objeto, isto irá lançar um erro se o objeto é indefinido:

Incorreta:

if (myObj !== null && typeof myObj !== "undefined") 

Devido a isso, você deve testar typeof () em primeiro lugar:

Corrigir:

if (typeof myObj !== "undefined" && myObj !== null) 

Esperando Âmbito nível de bloco

O JavaScript não criar um novo escopo para cada bloco de código.

É verdade que em muitas linguagens de programação, mas não é verdade em JavaScript.

É um erro comum, entre os novos desenvolvedores de JavaScript, para acreditar que este código retorna indefinido:

Exemplo

for (var i = 0; i < 10; i++) {
    // some code
}
return i;
Tente você mesmo "