recursal/MDN huggingface dataset:
RangeError: invalid array length
================================

Mensagem
--------
```

RangeError: invalid array length (Firefox)
RangeError: Invalid array length (Chrome)
RangeError: Invalid array buffer length (Chrome)
```

Tipo de erro
------------

`RangeError` (en-US)O que houve de errado?
----------------------

Um comprimento inválido de array pode aparecer nas seguintes situações:

* Quando criamos um `Array` ou um `ArrayBuffer` que tem um comprimento que ou é negativo ou é maior ou igual a 232, ou
* quando configuramos a propriedade `Array.length` a um valor que é negativo, ou maior ou igual a 232.

Porque `Array` e `ArrayBuffer` tem um comprimento limitado? A propriedade `length` de um `Array` ou um `ArrayBuffer` é representado por um inteiro 32-bit unsigned, que pode apenas armazenar valores que estão no intervalo de 0 a 232-1.

Se você está criando um `Array`, utilizando o construtor, você provavelmente quer usar a notação literal, onde o primeiro argumento é interpretado como o comprimento do `Array`.

Ao contrário, você poderia querer travar o comprimento antes de ajustar a propriedade do comprimento, ou utilizá-lo com um argumento do construtor.

Exemplos
--------

### Casos inválidos


```js
new Array(Math.pow(2, 40));
new Array(-1);
new ArrayBuffer(Math.pow(2, 32));
new ArrayBuffer(-1);

let a = [];
a.length = a.length - 1; // define -1 à propriedade length

let b = new Array(Math.pow(2, 32) - 1);
b.length = b.length + 1; // define 2^32 à propriedade length
```

### Casos válidos


```js
[Math.pow(2, 40)]; // [ 1099511627776 ]
[-1]; // [ -1 ]
new ArrayBuffer(Math.pow(2, 32) - 1);
new ArrayBuffer(0);

let a = [];
a.length = Math.max(0, a.length - 1);

let b = new Array(Math.pow(2, 32) - 1);
b.length = Math.min(0xffffffff, b.length + 1);

// 0xffffffff é a notação hexadecimal de 2^32 - 1
// que também pode ser escrito como (-1 >>> 0)
```

Veja também
-----------

* `Array`
* `Array.length`
* `ArrayBuffer`
Warning: unreachable code after return statement
================================================

Mensagem
--------
```

Warning: unreachable code after return statement (Firefox)
```

Tipo de Erro
------------

Warning

O que deu errado?
-----------------

Codigo inacessível depois da declaração de retorno pode ocorrer nas seguintes situações:

* Quando usado em uma expressão após a declaração de um `return` , ou
* quando usado em uma expressão **return** sem ponto e vírgula porém incluindo uma expressão diretamente depois.

Quando existe uma expressão após uma declaração válida de `return`, um warning é dado para indicar que o código depois da declaração `return` é inacessível, significando que ele pode nunca ser executado.

Porque eu devo usar ponto-e-virgula após declarações `return`? No caso de declarações `return` sem ponto-e-vírgula, ele pode deixar obscuro se o desenvolvedor quis usar o return na proxima linha, ou parar a execução e retornar. O warning indica que há uma ambiguidade no modo que a declaração `return` foi escrita.

Warnings não serão mostrado para declarações return sem ponto-e-vírgula nas seguintes situações:

* `throw`
* `break`
* `var`
* `function`
Exemplos
--------

### Casos Inválidos


```js
function f() {
  var x = 3;
  x += 4;
  return x; // return exits the function immediately
  x -= 3; // so this line will never run; it is unreachable
}

function f() {
  return; // this is treated like `return;`
  3 + 4; // so the function returns, and this line is never reached
}
```

### Casos Válidos


```js
function f() {
  var x = 3;
  x += 4;
  x -= 3;
  return x; // OK: return after all other statements
}

function f() {
  return 3 + 4; // OK: semicolon-less return with expression on the same line
}
```

Ver também
----------

* Automatic Semicolon Insertion
TypeError: invalid Array.prototype.sort argument
================================================

A exceção JavaScript "invalid Array.prototype.sort argument" ocorre quando o argumento de `Array.prototype.sort()` não é `undefined` ou uma função que compara os seus operandos.

Mensagem
--------
```

TypeError: The comparison function must be either a function or undefined (V8-based)
TypeError: invalid Array.prototype.sort argument (Firefox)
TypeError: Array.prototype.sort requires the comparator argument to be a function or undefined (Safari)
```

Tipo de erro
------------

`TypeError`O que ocorreu de errado?
------------------------

Espera-se que o argumento de `Array.prototype.sort()` seja `undefined` ou uma função que compare os seus operandos.

Exemplos
--------

### Casos inválidos


```js
[1, 3, 2].sort(5); // TypeError

const cmp = { asc: (x, y) => x >= y, dsc: (x, y) => x <= y };
[1, 3, 2].sort(cmp[this.key] || "asc"); // TypeError
```

### Casos válidos


```js
[1, 3, 2].sort(); // [1, 2, 3]

const cmp = { asc: (x, y) => x >= y, dsc: (x, y) => x <= y };
[1, 3, 2].sort(cmp[this.key || "asc"]); // [1, 2, 3]
```

Veja também
-----------

* `Array.prototype.sort()`
TypeError: "x" is read-only
===========================

Mensagem
--------
```

TypeError: "x" is read-only (Firefox)
TypeError: 0 is read-only (Firefox)
TypeError: Cannot assign to read only property 'x' of #<Object> (Chrome)
TypeError: Cannot assign to read only property '0' of [object Array] (Chrome)
```

Tipo de Erro
------------

`TypeError`O que deu errado?
-----------------

A variável global ou propriedade do objeto foi definida como propriedade somente-leitura. (Tecnicamente, esse é um dado de não-escrita.)

Esse erro ocorre apenas em código no strict mode. No modo não strict mode, essa atribuição é ignorada silenciosamente.

Exemplos
--------

### Casos inválidos

Propriedades somente-leitura não são super comuns, mas elas podem ser criadas utilizando `Object.defineProperty()` ou `Object.freeze()`.


```js
"use strict";
var obj = Object.freeze({ nome: "Elsa", pontuacao: 157 });
obj.pontuacao = 0; // TypeError

("use strict");
Object.defineProperty(this, "CONTADOR\_PULMAO", { value: 2, writable: false });
CONTADOR\_PULMAO = 3; // TypeError

("use strict");
var frozenArray = Object.freeze([0, 1, 2]);
frozenArray[0]++; // TypeError
```


Existem também algumas propriedades somente-leitura nativas do Javascript. Talvez você já tentou redefinir um constante matemática.


```js
"use strict";
Math.PI = 4; // TypeError
```


Desculpe, você não pode fazer isso.

A variável global `undefined` também é somente-leitura, então você não pode silenciar o infame erro "undefined is not a function" fazendo isso:


```js
"use strict";
undefined = function () {}; // TypeError: "undefined" is read-only
```

### Casos válidos


```js
"use strict";
var obj = Object.freeze({ nome: "Score", pontos: 157 });
obj = { nome: obj.nome, pontos: 0 }; // substituindo com o novo objeto funciona

("use strict");
var CONTADOR\_PULMAO = 2; // uma `var` funciona, porque ela não é somente-leitura
CONTADOR\_PULMAO = 3; // ok (anatomicamente improvável, porém...)
```

Veja também
-----------

* `Object.defineProperty()`
* `Object.freeze()`
* "Quais animais tem três pulmões?" no answers.com
* Klingons (uma outra resposta para essa pergunta)
TypeError: can't define property "x": "obj" is not extensible
=============================================================

 A exceção de modo strict do Javascript "can't define property "x": "obj" is not extensible" ocorre
 quando `Object.preventExtensions()` marcou um objeto como não extensível,
 de modo que ele não terá propriedades além das que ele tinha no momento em que foi marcado
 como não extensível.

Mensagem
--------


```js
TypeError: Cannot create property for a non-extensible object (Edge)
TypeError: can't define property "x": "obj" is not extensible (Firefox)
TypeError: Cannot define property: "x", object is not extensible. (Chrome)
```

Tipo de Erro
------------

`TypeError`O que deu errado?
-----------------

 Geralmente, um objeto é extensível e novas propriedades podem ser adicionadas a ele. Contudo,
 neste caso `Object.preventExtensions()` marcou o objeto como não extensível,
 de modo que ele não terá propriedades além das que ele tinha no momento em que foi marcado
 como não extensível.

Exemplos
--------

### Adicionando uma nova propriedade para um objeto não extensível

 No modo strict,
 a tentativa de adicionar uma nova propriedade em um objeto não extensível
 lança um `TypeError`. No modo sloppy, a adição da propriedade "x" é
 silenciosamente ignorada.


```js
"use strict";

var obj = {};
Object.preventExtensions(obj);

obj.x = "foo";
// TypeError: can't define property "x": "obj" is not extensible
```


 Em ambos os casos, modo strict e
 modo sloppy, chamar `Object.defineProperty()`
 lança uma exceção quando é adicionada uma nova propriedade em um objeto não extensível.


```js
var obj = {};
Object.preventExtensions(obj);

Object.defineProperty(obj, "x", { value: "foo" });
// TypeError: can't define property "x": "obj" is not extensible
```


 Para corrigir este erro, você precisa remover todas as chamadas para `Object.preventExtensions()`,
 ou movê-las para uma posição para que a propriedade seja adicionada antes e apenas depois o objeto seja marcado
 como não extensível. Naturalmente, você pode remover a tentativa de adicionar a propriedade, se você não
 precisar dela.


```js
"use strict";

var obj = {};
obj.x = "foo"; // adiciona a propriedade antes e só então previne extensões

Object.preventExtensions(obj);
```

Veja também
-----------

* `Object.preventExtensions()`
TypeError: can't assign to property "x" on "y": not an object
=============================================================

 A exceção do modo strict do Javascript "can't assign to property" ocorre quando é feita
 a tentativa de criar uma propriedade em um valor primitivo
 como um symbol, uma string, um number ou um boolean.
 Valores primitivos nâo podem ter nenhuma propriedade.

Mensagem
--------


```js
TypeError: can't assign to property "x" on {y}: not an object (Firefox)
TypeError: Cannot create property 'x' on {y} (Chrome)
```

Tipo de Erro
------------

`TypeError`.

O que deu errado?
-----------------

 No `Strict_mode`, um `TypeError` é gerado quando é feita a tentativa de
 criar uma propriedade em um valor primitivo como
 um symbol, uma string, um number ou um boolean.
 Valores primitivos não podem ter nenhuma propriedade.

 O problema pode ser que um valor inesperado está em um lugar inesperado, ou
 que uma variante de objeto de uma `String` ou um `Number` é esperado.

Exemplos
--------

### Casos inválidos


```js
"use strict";

var foo = "minha string";
// A linha a seguir não faz nada se não estiver em modo strict.
foo.bar = {}; // TypeError: can't assign to property "bar" on "my string": not an object
```

### Corrigindo o problema

Corrija o código para evitar que um primitivo seja usado em tais lugares, ou corrija o problema criando o objeto homólogo `Object`.


```js
"use strict";

var foo = new String("minha string");
foo.bar = {};
```

Veja também
-----------

* `Strict_mode`
* Primitivo
Warning: -file- is being assigned a //# sourceMappingURL, but already has one
=============================================================================

O aviso "-file- is being assigned a //# sourceMappingURL, ocorre quando um source map foi especificado mais de uma vez para uma determinada origem JavaScript.

Mensagem
--------
```

Warning: -file- is being assigned a //# sourceMappingURL, but already has one.
```

Tipo de erro
------------

Um aviso. A execução do JavaScript não será interrompida.

O que deu errado?
-----------------

Um source map foi especificado mais de uma vez para uma determinada origem JavaScript.

As fontes JavaScript são frequentemente combinadas e minificadas para tornar a entrega mais eficiente do servidor. Com source maps, o depurador pode mapear o código que está sendo executado para os arquivos de origem originais. Há duas maneiras de atribuir um source map, usando um comentário ou definindo um cabeçalho para o arquivo JavaScript.

Exemplos
--------

### Configurando source maps

Configurando um source map usando um comentário no arquivo:


```js
//# sourceMappingURL=http://example.com/path/to/your/sourcemap.map
```


Ou, alternativamente, você pode definir um cabeçalho para seu arquivo JavaScript:


```http
X-SourceMap: /path/to/file.js.map
```

Veja também
-----------

* Como usar um source map– Documentação do Firefox Tools
* Introdução aos source maps (2012)
TypeError: setting getter-only property "x"
===========================================

A exceção apenas do modo strict do Javascript "setting getter-only property" ocorre quando é feita a tentativa de definir um novo valor para uma propriedade para qual apenas um getter está especificado.

Mensagem
--------


```js
TypeError: Assignment to read-only properties is not allowed in strict mode (Edge)
TypeError: setting getter-only property "x" (Firefox)
TypeError: Cannot set property "prop" of #<Object> which has only a getter (Chrome)
```

Tipo de Erro
------------

`TypeError` no modo strict apenas.

O que deu errado?
-----------------

 Tem uma tentativa de definir um novo valor para uma propriedade para qual apenas um getter está especificado.
 Isto será silenciosamente ignorado no modo non-strict, enquanto vai lançar um `TypeError` no modo strict.

Exemplos
--------

### Propriedades sem setter

 O exemplo abaixo mostra como definir um getter para uma propriedade. Isso não especifica um setter, então um
 `TypeError` vai ser lançado quando for feita a tentativa de definir a propriedade `temperatura` para `30`. Para mais detalhes veja também a página `Object.defineProperty()`.


```js
"use strict";

function Arquivo() {
  var temperatura = null;
  Object.defineProperty(this, "temperatura", {
    get: function () {
      console.log("get!");
      return temperatura;
    },
  });
}

var arq = new Arquivo();
arq.temperatura; // 'get!'

arq.temperatura = 30;
// TypeError: setting getter-only property "temperatura"
```


 Para corrigir este erro, você vai ter que remover a linha 16, onde é feita a tentativa de definir a propriedade temperatura,
 ou você vai precisar implementar um setter para a propriedade, desta forma, por exemplo:


```js
"use strict";

function Arquivo() {
  var temperatura = null;
  var arquivo = [];

  Object.defineProperty(this, "temperatura", {
    get: function () {
      console.log("get!");
      return temperatura;
    },
    set: function (value) {
      temperatura = value;
      arquivo.push({ val: temperatura });
    },
  });

  this.getArquivo = function () {
    return arquivo;
  };
}

var arq = new Arquivo();
arq.temperatura; // 'get!'
arq.temperatura = 11;
arq.temperatura = 13;
arq.getArquivo(); // [{ val: 11 }, { val: 13 }]
```

Veja também
-----------

* `Object.defineProperty()`
* `Object.defineProperties()`
SyntaxError: illegal character
==============================

Mensagem
--------
```

SyntaxError: Invalid character (Edge)
SyntaxError: illegal character (Firefox)
SyntaxError: Invalid or unexpected token (Chrome)
```

Tipo do erro
------------

`SyntaxError` (en-US)O que deu errado?
-----------------

Há um token inválido ou inesperado que não pertence a esta posição no código. Utilize um editor que realce a sintaxe e cuidadosamente verifique seu código em relação a desajustes como um sinal de menos (`-`) no lugar de um travessão (`–`) ou aspas simples (`"`) no lugar de aspas não padronizadas(`“`).

Exemplos
--------

### Caracteres desajustados

Alguns carateres parecem similares, mas irão impedir que o analisador interprete seu código. Exemplos famosos disso são as aspas, o sinal de menos ou o ponto e vírgula (o ponto de interrogação grego (U+37e) é quase igual)


```js
“Isso parece uma string”;
// SyntaxError: illegal character

42 – 13;
// SyntaxError: illegal character
```


Isto deve funcionar:


```js
"Isso é realmente uma string";

42 - 13;
```

### Caracteres esquecidos

É fácil esquecer um caractere aqui ou ali.


```js
var colors = ['#000', #333', '#666'];
// SyntaxError: illegal character
```


Adicione as aspas que faltam no `'#333'`.


```js
var colors = ["#000", "#333", "#666"];
```

### Caracteres escondidos

Quando copiamos e colamos código de fontes externas, pode haver caracteres inválidos. Cuidado!


```js
var foo = 'bar';​
// SyntaxError: illegal character
```


Quando inspeciona-se este código em um editor como o Vim, você pode ver que, na verdade, há um caractere zero-width space (ZWSP) (U+200B).


```js
var foo = 'bar';<200b>
```

Veja também
-----------

* Lexical grammar
ReferenceError: invalid assignment left-hand side
=================================================

Mensagem
--------
```

ReferenceError: invalid assignment left-hand side
```

Tipo do erro
------------

`ReferenceError`.

O que deu errado?
-----------------

Ouve uma declaração inesperada em algum lugar. Isso pode ocorrer devido a uma confusão entre um Operador de atribuição (en-US) e um Operador de comparação (en-US), por exemplo. Enquanto um `"="` define uma variavel, `"=="` ou `"==="` são usados para fazer uma comparação entre valores.

Exemplos
--------


```js
if (Math.PI = 3 || Math.PI = 4) {
  console.log('de modo algum!');
}
// ReferenceError: invalid assignment left-hand side

var str = 'Olá, '
+= 'sou eu '
+= 'que você está procurando?';
// ReferenceError: invalid assignment left-hand side
```


Na declaração `if` você deve usar um operador de comparação ("=="), e para a atribuição da string, apenas o operador mais ("+") é necessario


```js
if (Math.PI == 3 || Math.PI == 4) {
  console.log("de modo algum!");
}

var str = "Olá, " + "do " + "outro lado!";
```

Veja também
-----------

* Operadores de atribuição (en-US)
* Operadores de comparação (en-US)
TypeError: "x" is not a function
================================

Mensagem
--------
```

TypeError: Object doesn't support property or method {x} (Edge)
TypeError: "x" is not a function
```

Tipo do erro
------------

`TypeError`.

O que deu errado?
-----------------

Houve a tentativa de obter um valor de uma função, mas o valor não é exatamente uma função. Algum código espera que você forneça uma função, mas não foi o que acontenceu.

Talvez exista um erro de digitação no nome da função? Talvez o objeto no qual você está chamando o método não tenha essa função? Por exemplo, objetos no JavaScript não tem a função `map`, mas o objeto Array tem.

Existem várias funções internas que precisam de uma função (callback). Você terá que prover uma função para obter esses métodos funcionando corretamente:

* Quando estiver trabalhando com os objetos `Array` ou `TypedArray` (en-US):
    + `Array.prototype.every()`, `Array.prototype.some()`, `Array.prototype.forEach()`, `Array.prototype.map()`, `Array.prototype.filter()`, `Array.prototype.reduce()`, `Array.prototype.reduceRight()`, `Array.prototype.find()`
* Quando estiver trabalhando com os objetos `Map` ou `Set`:
    + `Map.prototype.forEach()` e `Set.prototype.forEach()` (en-US)
Exemplos
--------

### Um erro de digitação no nome da função

Nesse caso, que ocorre com bastante frequência, existe um erro de digitação no nome do método:


```js
var x = document.getElementByID("foo");
// TypeError: document.getElementByID is not a function
```


O nome correto da função é `getElementById`:


```js
var x = document.getElementById("foo");
```

### Função chamada no objeto errado

Para alguns métodos, é necessário fornecer a função (callback) que irá funcionar apenas em objetos específicos. Nesse exemplo, é utilizado `Array.prototype.map()` que irá funcionar apenas em objetos `Array`.


```js
var obj = { a: 13, b: 37, c: 42 };

obj.map(function (num) {
  return num \* 2;
});

// TypeError: obj.map is not a function
```


Ao invés disso, use uma array:


```js
var numbers = [1, 4, 9];

numbers.map(function (num) {
  return num \* 2;
});

// Array [2, 8, 18]
```

### Função compartilha o nome com uma propriedade pré-existente

Algumas vezes, ao criar uma classe, pode haver uma propriedade e função com os mesmos nomes. Ao chamar a função, o compilador não consegue identificar a função.


```js
var Dog = function () {
  this.age = 11;
  this.color = "black";
  this.name = "Ralph";
  return this;
};

Dog.prototype.name = function (name) {
  this.name = name;
  return this;
};

var myNewDog = new Dog();
myNewDog.name("Cassidy"); //Uncaught TypeError: myNewDog.name is not a function
```


Então, use um nome diferente para a propriedade


```js
var Dog = function () {
  this.age = 11;
  this.color = "black";
  this.dogName = "Ralph"; //Using this.dogName instead of .name
  return this;
};

Dog.prototype.name = function (name) {
  this.dogName = name;
  return this;
};

var myNewDog = new Dog();
myNewDog.name("Cassidy"); //Dog { age: 11, color: 'black', dogName: 'Cassidy' }
```

Veja também
-----------

* Funções
TypeError: can't redefine non-configurable property "x"
=======================================================

 A exceção do Javascript "can't redefine non-configurable property" ocorre quando é
 feita a tentativa de redefinir uma propriedade, mas essa propriedade não é configurável.

Mensagem
--------


```js
TypeError: Cannot modify non-writable property {x} (Edge)
TypeError: can't redefine non-configurable property "x" (Firefox)
TypeError: Cannot redefine property: "x" (Chrome)
```

Tipo de Erro
------------

`TypeError`O que deu errado?
-----------------

 Foi feita a tentativa de redefinir uma propriedade, mas essa propriedade não é configurável. O
 atributo `configurable` controla se a propriedade pode ser deletada do
 objeto e se seus atributos (Exceto `writable`) podem ser alterados.
 Geralmente, propriedades de um objeto criado por um inicializador de objeto
 são configuráveis. Contudo, por exemplo, ao usar `Object.defineProperty()`, a propriedade não é configurável por padrão.

Exemplos
--------

### Propriedades não configuráveis criadas por `Object.defineProperty`

`Object.defineProperty()` cria uma propriedade não configurável se você
 não especificá-las como configurável.


```js
var obj = Object.create({});
Object.defineProperty(obj, "foo", { value: "bar" });

Object.defineProperty(obj, "foo", { value: "baz" });
// TypeError: can't redefine non-configurable property "foo"
```


 Você vai precisar alterar a propriedade "foo" para configurável, se você pretende redefini-la
 posteriormente no código.


```js
var obj = Object.create({});
Object.defineProperty(obj, "foo", { value: "bar", configurable: true });
Object.defineProperty(obj, "foo", { value: "baz", configurable: true });
```

Veja também
-----------

* [[Configurable]]
* `Object.defineProperty()`