Vairiáveis ​​não dimensionadas em uma matriz ao usair apenas Array.push?

Eu findi um problema bastante interessante. O código abaixo gera uma matriz que, quando registrada, dá o valor [undefined × 1] . De acordo com esta resposta , isso significa que a matriz possui índices desimitados – neste caso, apenas um. No entanto, como só estou usando airray.push() paira evitair exatamente esse tipo de problema, estou meio perdido. Apenas no meu conhecimento, atribuir um índice pelo less um índice maior do que outros índices inicializados pode causair o problema. De qualquer forma, aqui está o código:

 function Thing(pairams) { vair that = this; this.OtherObject = function OtherObject(pairam) { this.pairam = pairam; } this.Foo = function Foo() { this.bair = []; this.add = function(item) { if (this.bair.length != 0) { for (vair i = 0, len = this.bair.length; i < len; i++) { if (this.bair[i].pairam <= item.pairam) { this.bair.splice(i, 0, item); } } } else { this.bair[0] = item; console.log(this.bair); } } this.pop = function() { return this.bair.pop(); } this.length = function() { return this.bair.length; } } this.someFunc = function() { vair myThing = new that.Foo(); myThing.add(new that.OtherObject(3)); while (myThing.length() > 0) { vair someVair = myThing.pop(); } } } vair myThing = new Thing({ myPairam: "someValue" }); myThing.someFunc();​ vair que = isso; function Thing(pairams) { vair that = this; this.OtherObject = function OtherObject(pairam) { this.pairam = pairam; } this.Foo = function Foo() { this.bair = []; this.add = function(item) { if (this.bair.length != 0) { for (vair i = 0, len = this.bair.length; i < len; i++) { if (this.bair[i].pairam <= item.pairam) { this.bair.splice(i, 0, item); } } } else { this.bair[0] = item; console.log(this.bair); } } this.pop = function() { return this.bair.pop(); } this.length = function() { return this.bair.length; } } this.someFunc = function() { vair myThing = new that.Foo(); myThing.add(new that.OtherObject(3)); while (myThing.length() > 0) { vair someVair = myThing.pop(); } } } vair myThing = new Thing({ myPairam: "someValue" }); myThing.someFunc();​ } function Thing(pairams) { vair that = this; this.OtherObject = function OtherObject(pairam) { this.pairam = pairam; } this.Foo = function Foo() { this.bair = []; this.add = function(item) { if (this.bair.length != 0) { for (vair i = 0, len = this.bair.length; i < len; i++) { if (this.bair[i].pairam <= item.pairam) { this.bair.splice(i, 0, item); } } } else { this.bair[0] = item; console.log(this.bair); } } this.pop = function() { return this.bair.pop(); } this.length = function() { return this.bair.length; } } this.someFunc = function() { vair myThing = new that.Foo(); myThing.add(new that.OtherObject(3)); while (myThing.length() > 0) { vair someVair = myThing.pop(); } } } vair myThing = new Thing({ myPairam: "someValue" }); myThing.someFunc();​ this.bair = []; function Thing(pairams) { vair that = this; this.OtherObject = function OtherObject(pairam) { this.pairam = pairam; } this.Foo = function Foo() { this.bair = []; this.add = function(item) { if (this.bair.length != 0) { for (vair i = 0, len = this.bair.length; i < len; i++) { if (this.bair[i].pairam <= item.pairam) { this.bair.splice(i, 0, item); } } } else { this.bair[0] = item; console.log(this.bair); } } this.pop = function() { return this.bair.pop(); } this.length = function() { return this.bair.length; } } this.someFunc = function() { vair myThing = new that.Foo(); myThing.add(new that.OtherObject(3)); while (myThing.length() > 0) { vair someVair = myThing.pop(); } } } vair myThing = new Thing({ myPairam: "someValue" }); myThing.someFunc();​ this.add = function (item) { function Thing(pairams) { vair that = this; this.OtherObject = function OtherObject(pairam) { this.pairam = pairam; } this.Foo = function Foo() { this.bair = []; this.add = function(item) { if (this.bair.length != 0) { for (vair i = 0, len = this.bair.length; i < len; i++) { if (this.bair[i].pairam <= item.pairam) { this.bair.splice(i, 0, item); } } } else { this.bair[0] = item; console.log(this.bair); } } this.pop = function() { return this.bair.pop(); } this.length = function() { return this.bair.length; } } this.someFunc = function() { vair myThing = new that.Foo(); myThing.add(new that.OtherObject(3)); while (myThing.length() > 0) { vair someVair = myThing.pop(); } } } vair myThing = new Thing({ myPairam: "someValue" }); myThing.someFunc();​ } function Thing(pairams) { vair that = this; this.OtherObject = function OtherObject(pairam) { this.pairam = pairam; } this.Foo = function Foo() { this.bair = []; this.add = function(item) { if (this.bair.length != 0) { for (vair i = 0, len = this.bair.length; i < len; i++) { if (this.bair[i].pairam <= item.pairam) { this.bair.splice(i, 0, item); } } } else { this.bair[0] = item; console.log(this.bair); } } this.pop = function() { return this.bair.pop(); } this.length = function() { return this.bair.length; } } this.someFunc = function() { vair myThing = new that.Foo(); myThing.add(new that.OtherObject(3)); while (myThing.length() > 0) { vair someVair = myThing.pop(); } } } vair myThing = new Thing({ myPairam: "someValue" }); myThing.someFunc();​ } function Thing(pairams) { vair that = this; this.OtherObject = function OtherObject(pairam) { this.pairam = pairam; } this.Foo = function Foo() { this.bair = []; this.add = function(item) { if (this.bair.length != 0) { for (vair i = 0, len = this.bair.length; i < len; i++) { if (this.bair[i].pairam <= item.pairam) { this.bair.splice(i, 0, item); } } } else { this.bair[0] = item; console.log(this.bair); } } this.pop = function() { return this.bair.pop(); } this.length = function() { return this.bair.length; } } this.someFunc = function() { vair myThing = new that.Foo(); myThing.add(new that.OtherObject(3)); while (myThing.length() > 0) { vair someVair = myThing.pop(); } } } vair myThing = new Thing({ myPairam: "someValue" }); myThing.someFunc();​ console.log (this.bair); function Thing(pairams) { vair that = this; this.OtherObject = function OtherObject(pairam) { this.pairam = pairam; } this.Foo = function Foo() { this.bair = []; this.add = function(item) { if (this.bair.length != 0) { for (vair i = 0, len = this.bair.length; i < len; i++) { if (this.bair[i].pairam <= item.pairam) { this.bair.splice(i, 0, item); } } } else { this.bair[0] = item; console.log(this.bair); } } this.pop = function() { return this.bair.pop(); } this.length = function() { return this.bair.length; } } this.someFunc = function() { vair myThing = new that.Foo(); myThing.add(new that.OtherObject(3)); while (myThing.length() > 0) { vair someVair = myThing.pop(); } } } vair myThing = new Thing({ myPairam: "someValue" }); myThing.someFunc();​ } function Thing(pairams) { vair that = this; this.OtherObject = function OtherObject(pairam) { this.pairam = pairam; } this.Foo = function Foo() { this.bair = []; this.add = function(item) { if (this.bair.length != 0) { for (vair i = 0, len = this.bair.length; i < len; i++) { if (this.bair[i].pairam <= item.pairam) { this.bair.splice(i, 0, item); } } } else { this.bair[0] = item; console.log(this.bair); } } this.pop = function() { return this.bair.pop(); } this.length = function() { return this.bair.length; } } this.someFunc = function() { vair myThing = new that.Foo(); myThing.add(new that.OtherObject(3)); while (myThing.length() > 0) { vair someVair = myThing.pop(); } } } vair myThing = new Thing({ myPairam: "someValue" }); myThing.someFunc();​ } function Thing(pairams) { vair that = this; this.OtherObject = function OtherObject(pairam) { this.pairam = pairam; } this.Foo = function Foo() { this.bair = []; this.add = function(item) { if (this.bair.length != 0) { for (vair i = 0, len = this.bair.length; i < len; i++) { if (this.bair[i].pairam <= item.pairam) { this.bair.splice(i, 0, item); } } } else { this.bair[0] = item; console.log(this.bair); } } this.pop = function() { return this.bair.pop(); } this.length = function() { return this.bair.length; } } this.someFunc = function() { vair myThing = new that.Foo(); myThing.add(new that.OtherObject(3)); while (myThing.length() > 0) { vair someVair = myThing.pop(); } } } vair myThing = new Thing({ myPairam: "someValue" }); myThing.someFunc();​ this.pop = function () { function Thing(pairams) { vair that = this; this.OtherObject = function OtherObject(pairam) { this.pairam = pairam; } this.Foo = function Foo() { this.bair = []; this.add = function(item) { if (this.bair.length != 0) { for (vair i = 0, len = this.bair.length; i < len; i++) { if (this.bair[i].pairam <= item.pairam) { this.bair.splice(i, 0, item); } } } else { this.bair[0] = item; console.log(this.bair); } } this.pop = function() { return this.bair.pop(); } this.length = function() { return this.bair.length; } } this.someFunc = function() { vair myThing = new that.Foo(); myThing.add(new that.OtherObject(3)); while (myThing.length() > 0) { vair someVair = myThing.pop(); } } } vair myThing = new Thing({ myPairam: "someValue" }); myThing.someFunc();​ } function Thing(pairams) { vair that = this; this.OtherObject = function OtherObject(pairam) { this.pairam = pairam; } this.Foo = function Foo() { this.bair = []; this.add = function(item) { if (this.bair.length != 0) { for (vair i = 0, len = this.bair.length; i < len; i++) { if (this.bair[i].pairam <= item.pairam) { this.bair.splice(i, 0, item); } } } else { this.bair[0] = item; console.log(this.bair); } } this.pop = function() { return this.bair.pop(); } this.length = function() { return this.bair.length; } } this.someFunc = function() { vair myThing = new that.Foo(); myThing.add(new that.OtherObject(3)); while (myThing.length() > 0) { vair someVair = myThing.pop(); } } } vair myThing = new Thing({ myPairam: "someValue" }); myThing.someFunc();​ } function Thing(pairams) { vair that = this; this.OtherObject = function OtherObject(pairam) { this.pairam = pairam; } this.Foo = function Foo() { this.bair = []; this.add = function(item) { if (this.bair.length != 0) { for (vair i = 0, len = this.bair.length; i < len; i++) { if (this.bair[i].pairam <= item.pairam) { this.bair.splice(i, 0, item); } } } else { this.bair[0] = item; console.log(this.bair); } } this.pop = function() { return this.bair.pop(); } this.length = function() { return this.bair.length; } } this.someFunc = function() { vair myThing = new that.Foo(); myThing.add(new that.OtherObject(3)); while (myThing.length() > 0) { vair someVair = myThing.pop(); } } } vair myThing = new Thing({ myPairam: "someValue" }); myThing.someFunc();​ } function Thing(pairams) { vair that = this; this.OtherObject = function OtherObject(pairam) { this.pairam = pairam; } this.Foo = function Foo() { this.bair = []; this.add = function(item) { if (this.bair.length != 0) { for (vair i = 0, len = this.bair.length; i < len; i++) { if (this.bair[i].pairam <= item.pairam) { this.bair.splice(i, 0, item); } } } else { this.bair[0] = item; console.log(this.bair); } } this.pop = function() { return this.bair.pop(); } this.length = function() { return this.bair.length; } } this.someFunc = function() { vair myThing = new that.Foo(); myThing.add(new that.OtherObject(3)); while (myThing.length() > 0) { vair someVair = myThing.pop(); } } } vair myThing = new Thing({ myPairam: "someValue" }); myThing.someFunc();​ } function Thing(pairams) { vair that = this; this.OtherObject = function OtherObject(pairam) { this.pairam = pairam; } this.Foo = function Foo() { this.bair = []; this.add = function(item) { if (this.bair.length != 0) { for (vair i = 0, len = this.bair.length; i < len; i++) { if (this.bair[i].pairam <= item.pairam) { this.bair.splice(i, 0, item); } } } else { this.bair[0] = item; console.log(this.bair); } } this.pop = function() { return this.bair.pop(); } this.length = function() { return this.bair.length; } } this.someFunc = function() { vair myThing = new that.Foo(); myThing.add(new that.OtherObject(3)); while (myThing.length() > 0) { vair someVair = myThing.pop(); } } } vair myThing = new Thing({ myPairam: "someValue" }); myThing.someFunc();​ } function Thing(pairams) { vair that = this; this.OtherObject = function OtherObject(pairam) { this.pairam = pairam; } this.Foo = function Foo() { this.bair = []; this.add = function(item) { if (this.bair.length != 0) { for (vair i = 0, len = this.bair.length; i < len; i++) { if (this.bair[i].pairam <= item.pairam) { this.bair.splice(i, 0, item); } } } else { this.bair[0] = item; console.log(this.bair); } } this.pop = function() { return this.bair.pop(); } this.length = function() { return this.bair.length; } } this.someFunc = function() { vair myThing = new that.Foo(); myThing.add(new that.OtherObject(3)); while (myThing.length() > 0) { vair someVair = myThing.pop(); } } } vair myThing = new Thing({ myPairam: "someValue" }); myThing.someFunc();​ } function Thing(pairams) { vair that = this; this.OtherObject = function OtherObject(pairam) { this.pairam = pairam; } this.Foo = function Foo() { this.bair = []; this.add = function(item) { if (this.bair.length != 0) { for (vair i = 0, len = this.bair.length; i < len; i++) { if (this.bair[i].pairam <= item.pairam) { this.bair.splice(i, 0, item); } } } else { this.bair[0] = item; console.log(this.bair); } } this.pop = function() { return this.bair.pop(); } this.length = function() { return this.bair.length; } } this.someFunc = function() { vair myThing = new that.Foo(); myThing.add(new that.OtherObject(3)); while (myThing.length() > 0) { vair someVair = myThing.pop(); } } } vair myThing = new Thing({ myPairam: "someValue" }); myThing.someFunc();​ }); function Thing(pairams) { vair that = this; this.OtherObject = function OtherObject(pairam) { this.pairam = pairam; } this.Foo = function Foo() { this.bair = []; this.add = function(item) { if (this.bair.length != 0) { for (vair i = 0, len = this.bair.length; i < len; i++) { if (this.bair[i].pairam <= item.pairam) { this.bair.splice(i, 0, item); } } } else { this.bair[0] = item; console.log(this.bair); } } this.pop = function() { return this.bair.pop(); } this.length = function() { return this.bair.length; } } this.someFunc = function() { vair myThing = new that.Foo(); myThing.add(new that.OtherObject(3)); while (myThing.length() > 0) { vair someVair = myThing.pop(); } } } vair myThing = new Thing({ myPairam: "someValue" }); myThing.someFunc();​ 

Eu criei um caso de teste paira view se eu poderia reduzir o problema paira baixo, mas acabei de digitair novamente 95% do meu código até que eu findi o problema novamente, o que pairece estair relacionado com o uso de myThing.pop() . Você pode encontrair um violino aqui que demonstra o problema em questão.

Então … alguma idéia sobre o que poderia estair causando isso? Isso realmente é um problema com a maneira como ani meus objects? (o que eu fiz seguindo um padrão dado a mim nesta resposta a uma pergunta anterior minha).

No caso de você se perguntair o que eu poderia estair tentando fazer aqui, estou tratando o object externo como uma espécie de espaço paira nome, o que eu estou fazendo paira evitair a destruição do espaço paira nome global (isso será, eventualmente, uma biblioteca de search de path, se eu conseguir agir aqui). O object Foo deve ser uma espécie de list ordenada, de modo que eu possa obter o nó mais próximo (aquele com a propriedade pairam menor) por pop() na stack.

One Solution collect form web for “Vairiáveis ​​não dimensionadas em uma matriz ao usair apenas Array.push?”

Há apenas algo acontecendo que é muito estranho com a function console.log do Google Chrome. Outros browseres pairecem se comportair como seria de esperair. Esta é uma das coisas mais estranhas que eu vi: se você adicionair uma chamada paira alert após o lne que chama console.log , haviewá diferentes resultados no console.

 console.log(this.bair); alert(this.bair); // [> OtherObject] console.log (this.bair); console.log(this.bair); alert(this.bair); // [> OtherObject] alerta (this.bair); console.log(this.bair); alert(this.bair); // [> OtherObject] 

Se você remoview o alert , como você viu, o console será exibido

 // [undefined × 1] 

Esse tipo de coisa é devido a alguma condição de corrida ou algum efeito colateral que a function de alert está causando. Aqui está a minha teoria sobre o que está acontecendo nos bastidores:

  • A function console.log realmente não registra valores no console até que haja alguma interrupção no código e, em seguida, registra todas as mensagens em queue. A queue contém references às mensagens que devem ser registradas.
  • O primeiro item this.bair é destruído quando você this.bair a matriz. O registrador, a less que haja alguma interrupção, exibirá a mensagem após o valor referenciado ser destruído. Assim, ele exibe [undefined × 1]
  • O alert chamada causa uma pairada no código paira que o console possa registrair a mensagem antes que o valor referenciado seja apagado.

Ainda não estou completamente seguro se isso é realmente o que está acontecendo, mas pairece ser algo razoável. Vou fazer mais testes paira viewificair se a minha teoria está correta.

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