let person = {name: "Annah", age: 18};
let pointer = person;
pointer = undefined;
person doesn't become undefined, only pointer?
3 Réponses :
Créez un objet pour contenir vos enregistrements et accédez-y via leurs identifiants. Par exemple, en utilisant nom comme identifiant:
const people = {};
const person = { name: "Annah", age: 18 };
people[person.name] = person;
console.info(people[person.name]); // Annah is there
delete people[person.name];
console.info(people[person.name]); // undefined - Annah is gone
Ouais, je suppose que cela fonctionnera, mais c'est un peu une manière hacky. Disons simplement que javascript est nul ...
Ce n'est en fait pas piraté. C'est juste la façon dont vous le feriez en Javascript et juste une question de s'habituer au langage. Nous avons tendance à nous plaindre des langues auxquelles nous ne sommes pas habitués. On pourrait dire que les pointeurs sont désordonnés et que C ++ est verbeux et craint tout de même. En fin de compte, je suppose que c'est comme la religion: chaque personne a ses propres croyances et nous devons lutter pour accepter qu'il existe d'autres points de vue qui sont également valables. Toutes les langues populaires ont leurs bons et leurs mauvais côtés - il suffit de mieux les connaître et de ne pas trop se plaindre :-)
... pour ajouter au grand commentaire ci-dessus: les langues ont un but. C ++ utilise des pointeurs car il est conçu pour être très performant et la gestion manuelle de la mémoire est rapide (mais aussi compliquée). JS a été inventé pour faire clignoter les pages Web, cela n'a pas besoin d'être rapide, juste assez rapide et en utilisant des références et une collection de garabges, le langage est facile à gérer pour les débutants (et les professionnels qui veulent faire plus avec moins de code :))
Vous pouvez émuler ce beahviour en utilisant un objet wrapping:
with({
person: undefined,
get pointer() { return this.person; },
set pointer(value) { this.person = value },
}) {
person = { some: "test" };
console.log(pointer);
pointer = undefined;
console.log(person);
}
Du fait que vous ne pouvez plus accéder à person.name , vous devez le déréférencer en utilisant val (person) .name .
En théorie, vous pouvez créer deux variables référençant la même chose:
const reference = value => ({
value,
free() { this.value = undefined },
});
const val = ref => ref.value;
let person = reference({name: "Annah", age: 18});
let pointer = person;
console.log(val(person));
pointer.free();
console.log(val(person));
Mais s'il vous plaît, ne faites pas ça (sauf pour le plaisir).
votre code est incorrect, SyntaxError: missing = in const declaration
veuillez utiliser un extrait de code, votre code retourne 2 NaN, ce qui n'est pas indéfini
@mrj veuillez réessayer ... :)
@mrj de quoi parlez-vous?
pour obtenir le nom d'origine (personne) par Object (pointeur) valeurs possibles
Il n'y a pas de pointeurs en javascript depuis ES6, mais il existe une solution de contournement pour cela ...
La classe Pointer:
// Put the Pointer Class HERE
var person = {name: "Annah", age: 18}; // Notice that let => var as Pointer cannot access lets and consts
var pointer = new Pointer("person"); // Pointer to person
pointer.value = undefined; // Sets value to undefined
// OR:
pointer.delete() // Deletes it permanently
L'exemple
/****
USAGE:
var a = 3;
var b = new Pointer("a")
b.value = 1
console.log(a) // Logs "1"
****/
class Pointer{
constructor(str){ // Called when "new Pointer()"
this.var = str // Assign Pointer.var to the string
this._value = window[str]
}
set value(value){
window[this.var] = value
this._value = value
}
get value(){
return window[this.var]
}
changeLocation(str){
this.constructor(str)
}
delete(){
delete window[this.var]
}
}
personneelle-même est également pointeur . Pouvez-vous dire de quelle langue vous venez? Et pourquoi pensez-vous qu'un pointeur modifierait l'objet?En C ++, vous pouvez déclarer
pointeurcomme une référence à la variableperson. Il n'y a pas d'équivalent en JavaScript.@appleapple J'ai commencé en javascript et je connais aussi du java. Cela m'aide d'avoir un pointeur car j'ai un tableau avec de nombreux objets.
Je n'écris pas java, mais vous ne pouvez toujours pas faire cela dans java IIRC.
Et définir un pointeur sur null n'est pas plus spécial que de le définir sur un autre objet, qui ne devrait pas écraser l'origine un IMHO.