Hoje, quando estava olhando o código do protótipo, descobri o operador delete.
não definido: function(tecla) {
var valor = this._object[chave];
exclua este._objeto[chave];
valor de retorno;
}
Eu verifiquei o manual,
O operador delete exclui uma propriedade de um objeto ou um elemento de uma matriz.
excluir expressão
O parâmetro expressão é uma expressão JScript válida, geralmente um nome de propriedade ou elemento de matriz.
Descrição Se o resultado da expressão for um objeto e o atributo especificado na expressão existir, e o objeto não permitir que ele seja excluído, será retornado falso.
Em todos os outros casos, retorna verdadeiro.
É bom ver "excluir um elemento do array", mas depois de tentar no ff, parece que só pode excluir o valor desse elemento, não o elemento em si. Porém, é possível excluir uma propriedade de um objeto.
Pesquisei novamente no Google e encontrei um artigo muito detalhado, então vou republicá-lo aqui para não esquecer:
Título: Variáveis Javascript e Operador Delete Declaração de Direitos Autorais: Você pode reimprimir à vontade, mas deve indicar o autor original charlee e o link original http://tech.idv2.com/2008/01/09/javascript-variables-and- delete ao reimprimir -operator/ e esta instrução.
contente:
Acabei de ler um bom artigo (link original), que fornece uma análise completa do operador delete em Javascript. Aqui está uma breve introdução ao conteúdo.
Embora seja um operador de exclusão pequeno, seu comportamento é extremamente complexo.
Variáveis Javascript
Objeto excluído pelo operador delete Quando a exclusão é executada em uma variável, atributos que podem ser excluídos e atributos que não podem ser excluídos, variáveis que podem ser excluídas e variáveis que não podem ser excluídas
Valor de retorno de exclusão
--------------------------------------------------------- --- ----------------------------------
Variáveis Javascript Na verdade, em Javascript, variáveis = propriedades do objeto, isso ocorre porque o Javascript criará um objeto Global antes de executar o script. Todas as variáveis globais são propriedades deste objeto Global. Ao executar a função, um objeto de Ativação também será criado. Por exemplo:
var global = 42;this.global; // 42, você pode acessar o objeto Global através deste this.global2 = 12;global2; // 12function foo() { var local = 36; ser acessado diretamente, // Portanto, a variável local não pode ser acessada por meio de foo.local} O objeto excluído pelo operador delete
Também existe um operador delete em C++, que exclui o objeto apontado pelo ponteiro. Por exemplo:
// C++class Object {public: Object *x;}Object o;ox = new Object();delete ox; // O novo objeto Object na linha anterior será lançado, mas a exclusão do Javascript é diferente do C++. O objeto apontado por ox não é excluído, mas o próprio atributo ox é excluído.
// Javascriptvar o = {};ox = new Object();delete ox; // O objeto Object new na linha anterior ainda existe ox; Após a exclusão do ox, o objeto Object será coletado como lixo porque perdeu sua referência. Portanto, a exclusão do ox é "equivalente a" a exclusão do objeto apontado pelo ox. No entanto, esta ação não é um padrão ECMAScript. mesmo que uma implementação seja completamente Não excluir o objeto Object não viola o padrão ECMAScript.
“Excluir atributos em vez de excluir objetos” pode ser confirmado pelo código a seguir.
var o = {};var a = { x: 10 };oa = a;delete oa; // O atributo oa é excluído oa; ainda é uma referência, portanto não será reciclada. Além disso, delete ox também pode ser escrito como delete o["x"], sendo que ambos têm o mesmo efeito.
Ao excluir uma variável, a variável também é uma propriedade do objeto Global ou de Ativação, portanto a operação de exclusão na variável tem o mesmo resultado.
var global = 42; // Excluir Global.globalfunction foo() { var local = 36; // Excluir Activation.local} Propriedades que podem ser excluídas e propriedades que não podem ser excluídas Nem todas as propriedades podem ser excluídas; excluir. Por exemplo, propriedades declaradas no protótipo não podem ser excluídas:
function C() { this.x = 42 }C.prototype.x = 12;var o = new C();ox; .xdelete ox;ox; // 12, ox definido no protótipo não será excluído mesmo se delete ox for executado novamente. Este tipo de atributo pode ser considerado como tendo as características de DontDelete.
var re = /abc/i;delete re.ignoreCase;re.ignoreCase; // true, ignoreCase não pode excluir variáveis que podem ser excluídas e variáveis que não podem ser excluídas. Variáveis declaradas por meio de var e funções declaradas por meio de função têm o atributo DontDelete e. não pode ser excluído.
var x = 36;delete x;x; // 36, x não é excluído y = 12;delete y;y; // undefinedfunction foo() { return 42; é Uma exceção é que no código executado por meio de eval, embora as variáveis declaradas por meio de var pertençam ao mesmo objeto Global que as variáveis normais declaradas por var, elas não possuem o atributo DontDelete e podem ser excluídas.
eval("var x = 36;");x; // 42delete x;x; // undefined Mas há uma exceção definida por var na função no código eval tem DontDelete e não pode ser excluída eval(" ( function() { var x = 42; delete x; return x;
Delete é um operador normal e retorna verdadeiro ou falso. A regra é: quando a propriedade do objeto excluído existe e possui DontDelete, retorna falso, caso contrário retorna verdadeiro. Uma característica aqui é que true é retornado mesmo quando o atributo do objeto não existe, portanto, o valor de retorno não é completamente equivalente ao fato de a exclusão ter sido bem-sucedida ou não.
function C() { this.x = 42 }C.prototype.y = 12;var o = new C();delete ox; // trueo.x; / ox existe e não há DontDelete, return truedelete oy; // trueo.y; // 12// o próprio não tem atributo oy, então return true// A partir daqui você também pode ver a existência da cadeia de protótipos, a os próprios atributos do objeto e os atributos do protótipo são diferentes delete o; // false// Global.o possui o atributo DontDelete, portanto retorna falsedelete undefinedProperty; // true// Global não possui propriedade chamada undefinedProperty, portanto retorna truedelete 42; /42 não é uma propriedade, portanto retorna true. Algumas implementações lançarão uma exceção (violando o padrão ECMAScript) var x = 24; delete x++; // truex;