Ich bin irgendwie neu in Javascript und heute arbeitete ich an einer Funktion, die im Grunde einen Wert schaltet und es als Alarm anzeigt, aber ich stolperte über ein seltsames Verhalten von JavaScript bezogen zu wahr/falsch und 0/1.true/false vs int in JavaScript (unerwartetes Verhalten)
Der folgende Code, wenn der Benutzer auf Toggle-Anker-Link klickt, es scheint nicht, den Wert und den Alarm zu wechseln gibt immer „true“ (was ich geschehen dachte sollte):
document.body.innerHTML = '<a href="#" id="toggle"> toggle </a>'+ document.body.innerHTML;
function f() {
this.status = true;
var btn = document.getElementById("toggle")
btn.addEventListener("click",() => {
if (this.status == true) {
alert(this.status)
this.status = false;
} else {
alert(this.status)
this.status = true;
}
}, false)
}
f()
Aber wenn ich 0 und 1 anstelle von wahr/falsch verwende, funktioniert der Code aus irgendeinem Grund.
document.body.innerHTML = '<a href="#" id="toggle"> toggle </a>' +document.body.innerHTML;
function f() {
this.status = 1;
var btn = document.getElementById("toggle")
btn.addEventListener("click",()=>{
if(this.status==1){
alert(this.status)
this.status = 0;
}else{
alert(this.status)
this.status = 1;
}
},false)
}
f()
Ich habe keine Ahnung, was hier vor sich geht, dieser Zeiger wegen this
Ist i in der Funktion oder etwas bin mit ?.
, warum Sie nicht === statt == benutzen? – zhuravlyov
JavaScript hat eine komplexere Vorstellung von Gleichheit, als Sie vielleicht in anderen Sprachen kennen, aber es ist zum Glück eine sehr gut verstandene Vorstellung; Schauen Sie sich [diesen Artikel] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness) für eine Einführung an – Hamms