Heim > Web-Frontend > js-Tutorial > Eine Zusammenstellung einiger JavaScript-Wissenspunkte, bei denen leicht Fehler gemacht werden können

Eine Zusammenstellung einiger JavaScript-Wissenspunkte, bei denen leicht Fehler gemacht werden können

怪我咯
Freigeben: 2017-04-05 14:23:26
Original
1637 Leute haben es durchsucht

Vorwort

Dieser Artikel enthält einige fehleranfällige Wissenspunkte, die ich beim Erlernen von JavaScript gesammelt und organisiert habe. Er behandelt den Variablenbereich und den Typvergleich Zeiger und Funktion werden von der oberflächlichen Seite zur tieferen Ebene eingeführt und erklärt, was auch einige ES6-Wissenspunkte beinhaltet.

JavaScript-Wissenspunkte

1. Variablenbereich

var a = 1;
function test() {
    var a = 2;

    console.log(a); // 2
}

test();
Nach dem Login kopieren

Werte im Funktionsbereich deklarieren und zuweisen über a und über der Konsole, sodass die Ausgabe a nach dem Proximity-Prinzip gleich 2 ist.

var a = 1;
function test2() {
    console.log(a); // undefined

    var a = 2;
}

test2();
Nach dem Login kopieren

Obwohl a im obigen Funktionsumfang deklariert und zugewiesen ist, befindet es sich unter der Konsole. Die a-Variable wird heraufgestuft und deklariert, aber noch nicht zugewiesen, sodass „undefiniert“ ausgegeben wird.

var a = 1;
function test3() {
    console.log(a); // 1

    a = 2;
}

test3();
Nach dem Login kopieren

A im obigen Funktionsbereich wird neu zugewiesen, nicht neu deklariert und befindet sich unter der Konsole, sodass a im globalen Bereich ausgegeben wird.

let b = 1;
function test4() {
    console.log(b); // b is not defined

    let b = 2;
}

test4();
Nach dem Login kopieren

Das ES6-let wird im obigen Funktionsumfang verwendet, um die Variable b neu zu deklarieren. Im Gegensatz zu var hat let jedoch nicht die Funktion der Variablenheraufstufung, daher wird der Ausgabefehler „b ist nicht definiert“ angezeigt. wird gemeldet.

function test5() {
    let a = 1;

    {
        let a = 2;
    }

    console.log(a); // 1
}

test5();
Nach dem Login kopieren

Im obigen Funktionsbereich wird let verwendet, um a als 1 zu deklarieren, und a wird im Blockebenenbereich als 2 deklariert, da sich die Konsole innerhalb der Funktion nicht im Blockebenenbereich befindet , also Ausgabe 1.

2. Typvergleich

var arr = [],
    arr2 = [1];

console.log(arr === arr2); // false
Nach dem Login kopieren

Vergleichen Sie zwei verschiedene Arrays oben, die Konsole ist falsch.

var arr = [],
    arr2 = [];

console.log(arr === arr2); // false
Nach dem Login kopieren

Vergleichen Sie die beiden oben genannten identischen Arrays, da der Vergleich zwischen Array und Array immer falsch ist, sodass die Konsole falsch ist.

var arr = [],
    arr2 = {};

console.log(typeof(arr) === typeof(arr2)); // true
Nach dem Login kopieren

Verwenden Sie typeof, um die oben genannten Arrays und Objekte zu vergleichen. Da typeof NULL erhält, sind alle Array- und Objekttypen Objekte, sodass die Konsole wahr ist.

var arr = [];

console.log(arr instanceof Object); // true
console.log(arr instanceof Array); // true
Nach dem Login kopieren

Oben wird „instanceof“ verwendet, um zu bestimmen, ob eine Variable zu einer Instanz eines Objekts gehört. Da Arrays auch ein Objekttyp in JavaScript sind, sind beide Konsolen wahr.

3. Dies zeigt auf

var obj = {
    name: 'xiaoming',
    getName: function () {
        return this.name
    }
};

console.log(obj.getName());  // 'xiaoming'
Nach dem Login kopieren

Dies zeigt in der Objektmethode oben auf das Objekt selbst, sodass „xiaoming“ ausgegeben wird.

var obj = {
    myName: 'xiaoming',
    getName: function () {
        return this.myName
    }
};

var nameFn = obj.getName;

console.log(nameFn()); // undefined
Nach dem Login kopieren

Die Methode im Objekt wird einer Variablen oben zugewiesen. Zu diesem Zeitpunkt zeigt diese in der Methode nicht mehr auf das Objekt obj und somit auf das Fensterobjekt, sondern auf die Konsole "undefiniert".

var obj = {
    myName: 'xiaoming',
    getName: function () {
        return this.myName
    }
};

var obj2 = {
    myName: 'xiaohua'
};

var nameFn = obj.getName;

console.log(nameFn.apply(obj2)); // 'xiaohua'
Nach dem Login kopieren

Die Methode im obj-Objekt ist auch der Variablen nameFn oben zugewiesen, diese wird jedoch über die apply-Methode auf das obj2-Objekt verwiesen, sodass die endgültige Konsole „xiaohua“ ist.

4. Funktionsparameter

function test6() {
    console.log(arguments); // [1, 2]
}

test6(1, 2);
Nach dem Login kopieren

Das Obige verwendet das Argumentobjekt in der Funktion, um das an die Funktion übergebene Parameterarray zu erhalten, sodass das Ausgabearray [ 1, 2].

function test7 () {
    return function () {
        console.log(arguments); // 未执行到此,无输出
    }
}

test7(1, 2);
Nach dem Login kopieren

Das Obige verwendet auch Argumente, um Parameter zu erhalten, aber da test7(1, 2) die Funktion nicht im Gegenzug ausführt, gibt es keine Ausgabe, wenn test7(1, 2)(3, 4 ) ausgeführt wird, erfolgt die Ausgabe [3, 4].

var args = [1, 2];

function test9() {
    console.log(arguments); // [1, 2, 3, 4]
}

Array.prototype.push.call(args, 3, 4);

test9(...args);
Nach dem Login kopieren

Das Obige verwendet die Methode Array.prototype.push.call(), um 3 und 4 in das args-Array einzufügen, und verwendet den ES6-Spread-Operator (...), um das Array zu erweitern und zu übergeben es in test9, also ist die Konsole [1, 2, 3, 4].

5. Abschlussproblem

var elem = document.getElementsByTagName('p'); // 如果页面上有5个p

for(var i = 0; i < elem.length; i++) {
    elem[i].onclick = function () {
        alert(i); // 总是5
    };
}
Nach dem Login kopieren

Der Wert, der angezeigt wird, wenn Sie auf ein beliebiges p klicken, ist immer 5, weil Wenn Sie den Klick auslösen, ist der Wert von i zum Zeitpunkt des Ereignisses bereits 5, was auf folgende Weise gelöst werden kann:

var elem = document.getElementsByTagName(&#39;p&#39;); // 如果页面上有5个p

for(var i = 0; i < elem.length; i++) {
    (function (w) {
        elem[w].onclick = function () {
            alert(w); // 依次为0,1,2,3,4
        };
    })(i);
}
Nach dem Login kopieren

Kapseln Sie eine Funktion zur sofortigen Ausführung außerhalb des gebundenen Klickereignisses und übergeben Sie sie Ich bin in der Funktion.

6. Kopieren und Zuweisen von Objekten

var obj = {
    name: &#39;xiaoming&#39;,
    age: 23
};

var newObj = obj;

newObj.name = &#39;xiaohua&#39;;

console.log(obj.name); // &#39;xiaohua&#39;
console.log(newObj.name); // &#39;xiaohua&#39;
Nach dem Login kopieren

Oben haben wir das obj-Objekt dem newObj-Objekt zugewiesen und dadurch das Namensattribut von newObj geändert, aber den Namen von Die Eigenschaften des obj-Objekts werden ebenfalls manipuliert. Dies liegt daran, dass das newObj-Objekt tatsächlich nur eine Speicheradresse und keine echte Kopie erhält, sodass das obj-Objekt manipuliert wird.

var obj2 = {
    name: &#39;xiaoming&#39;,
    age: 23
};

var newObj2 = Object.assign({}, obj2, {color: &#39;blue&#39;});

newObj2.name = &#39;xiaohua&#39;;

console.log(obj2.name); // &#39;xiaoming&#39;
console.log(newObj2.name); // &#39;xiaohua&#39;
console.log(newObj2.color); // &#39;blue&#39;
Nach dem Login kopieren

Durch die Verwendung der oben genannten Methode Object.assign() zum Erstellen einer tiefen Kopie des Objekts kann die Möglichkeit einer Manipulation des Quellobjekts vermieden werden. Weil die Methode Object.assign() eine beliebige Anzahl der aufzählbaren Eigenschaften des Quellobjekts in das Zielobjekt kopieren und dann das Zielobjekt zurückgeben kann.

var obj3 = {
    name: &#39;xiaoming&#39;,
    age: 23
};

var newObj3 = Object.create(obj3);

newObj3.name = &#39;xiaohua&#39;;

console.log(obj3.name); // &#39;xiaoming&#39;
console.log(newObj3.name); // &#39;xiaohua&#39;
Nach dem Login kopieren

Wir können auch die Methode Object.create() verwenden, um ein Objekt zu kopieren. Die Methode Object.create() kann ein neues Objekt mit dem angegebenen Prototypobjekt und den angegebenen Eigenschaften erstellen.

Fazit

Das Erlernen von JavaScript ist ein langer Prozess und kann nicht über Nacht erledigt werden. Ich hoffe, dass die in diesem Artikel vorgestellten Punkte den Schülern, die JavaScript lernen, helfen können, ein tieferes Verständnis und eine bessere Beherrschung der JavaScript-Syntax zu erlangen und Umwege zu vermeiden.

Das obige ist der detaillierte Inhalt vonEine Zusammenstellung einiger JavaScript-Wissenspunkte, bei denen leicht Fehler gemacht werden können. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage