Dieser Artikel wurde manuell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original
Informationen
Das angeforderte Thema wird unten angezeigt. Es ist jedoch nicht in dieser Bibliothek vorhanden.

Strict-Modus (JavaScript)

Der Strict-Modus ermöglicht eine bessere Fehlerüberprüfung innerhalb des Codes. Beispielsweise ist es im Strict-Modus nicht möglich, implizit deklarierte Variablen zu verwenden, schreibgeschützten Eigenschaften Werte zuzuweisen oder nicht erweiterbaren Objekten Eigenschaften hinzuzufügen. Die Einschränkungen werden im Abschnitt Einschränkungen für Code im Strict-Modus weiter unten in diesem Thema aufgeführt. Weitere Informationen über den Strict-Modus finden Sie unter ECMAScript-Sprachenspezifikation, 5. Edition.

Warnhinweis Vorsicht

Der Strict-Modus wird erst ab Internet Explorer 10 unterstützt.

Sie können den Strict-Modus deklarieren, indem Sie am Anfang einer Datei, eines Programms oder einer Funktion "use strict"; hinzufügen. Diese Art der Deklaration wird als Anweisungseinleitung bezeichnet. Der Bereich einer Strict-Modus-Deklaration ist vom Kontext abhängig. Wird die Deklaration in einem globalen Kontext (nicht im Bereich einer Funktion) erstellt, gilt der Strict-Modus für den gesamten Programmcode. Bei einer Deklaration innerhalb einer Funktion ist der Strict-Modus für den gesamten Code der Funktion gültig. Im folgenden Beispiel gilt der Strict-Modus für den gesamten Code. Da die Variablendeklaration außerhalb der Funktion liegt, wird der Syntaxfehler "Nicht definierte Variable im Strict-Modus" ausgelöst.

"use strict";
function testFunction(){
    var testvar = 4;
    return testvar;
}

// This causes a syntax error.
testvar = 5;

Im folgenden Beispiel gilt der Strict-Modus nur für den Code in der testFunction. Der Syntaxfehler wird nicht von der Variablendeklaration außerhalb der Funktion verursacht, sondern von der Deklaration innerhalb der Funktion.

function testFunction(){
    "use strict";
    // This causes a syntax error.
    testvar = 4;
    return testvar;
}
testvar = 5;

In der folgenden Tabelle sind die wichtigsten Einschränkungen für den Strict-Modus aufgeführt.

Sprachelement

Einschränkung

Fehler

Beispiel

Variable

Verwenden einer Variable, die nicht deklariert ist.

SCRIPT5042: Variable im Strict-Modus undefiniert

testvar = 4;

Schreibgeschützte Eigenschaft

Schreiben in eine schreibgeschützte Eigenschaft.

SCRIPT5045: Im Strict-Modus sind Zuweisungen an schreibgeschützte Eigenschaften nicht zulässig.

var testObj = Object.defineProperties({}, {
    prop1: {
        value: 10,
        writable: false // by default
    },
    prop2: {
        get: function () {
        }
    }
});
testObj.prop1 = 20; 
testObj.prop2 = 30;

Nicht erweiterbare Eigenschaft

Hinzufügen einer Eigenschaft zu einem Objekt, dessen extensible-Attribut auf false festgelegt ist.

SCRIPT5046: Die Eigenschaft für ein nicht erweiterbares Objekt kann nicht erstellt werden.

var testObj = new Object();

Object.preventExtensions(testObj);

testObj.name = "Bob";

delete

Löschen einer Variable, einer Funktion oder eines Arguments.

Löschen einer Eigenschaft, deren configurable-Attribut auf false festgelegt ist.

SCRIPT1045: Das Aufrufen von "delete" für einen <Ausdruck> ist im Strict-Modus nicht zulässig

var testvar = 15;
function testFunc() {};
delete testvar;
delete testFunc;

Object.defineProperty(testObj, "testvar", {
    value: 10,
    configurable: false
    });
delete testObj.testvar;

Duplizieren einer Eigenschaft

Mehrfachdefinition einer Eigenschaft im selben Objektliteral.

SCRIPT1046: Mehrere Definitionen einer Eigenschaft sind im Strict-Modus nicht zulässig

var testObj = {
    prop1: 10,
    prop2: 15,
    prop1: 20
};


Duplizieren eines Parameternamens

Mehrfachverwendung eines Parameternamens in einer Funktion.

SCRIPT1038: Doppelte formale Parameternamen sind im Strict-Modus nicht zulässig

function testFunc(param1, param1) {
    return 1;
};

Für die zukünftige Verwendung reservierte Schlüsselwörter

Verwenden eines für die zukünftige Verwendung reservierten Schlüsselworts als Variablen- oder Funktionsname.

SCRIPT1050: Das Verwenden eines für die zukünftige Verwendung reservierten Worts für einen Bezeichner ist ungültig. Der Bezeichnername ist im strict-Modus reserviert.

  • implements

  • interface

  • package

  • private

  • protected

  • public

  • static

  • yield

Oktale

Zuweisen eines Oktalwerts zu einem numerischen Literal oder der Versuch der Verwendung eines Escapezeichens für einen Oktalwert.

SCRIPT1039: Numerische Oktalliterale und Escapezeichen sind im Strict-Modus nicht zulässig.

var testoctal = 010;
var testescape = \010;

this

Der Wert von this wird nicht in das globale Objekt konvertiert, wenn er null oder undefined lautet.

function testFunc() {
    return this;
}
var testvar = testFunc();

Außerhalb des Strict-Modus ist der Wert von testvar das globale Objekt, während der Wert im Strict-Modus undefined ist.

eval als Bezeichner

Die Zeichenfolge "eval" kann nicht als Bezeichner (Variablen- oder Funktionsname, Parametername, usw.) verwendet werden.

var eval = 10;

Funktionsdeklaration innerhalb einer Anweisung oder eines Blocks

Eine Funktion kann nicht innerhalb einer Anweisung oder eines Blocks deklariert werden.

SCRIPT1047: Im Strict-Modus können Funktionsdeklarationen nicht in einer Anweisung oder einem Block geschachtelt werden. Sie dürfen nur auf oberster Ebene oder direkt in einem Funktionstext vorkommen.

var arr = [1, 2, 3, 4, 5];
var index = null;
for (index in arr) {
    function myFunc() {};
}

Variablendeklaration innerhalb einer eval-Funktion

Eine Variable, die innerhalb einer eval-Funktion deklariert wurde, kann nicht außerhalb dieser Funktion verwendet werden.

SCRIPT1041: Ungültige Verwendung von "eval" im Strict-Modus

eval("var testvar = 10");
testvar = 15;

Indirekte Auswertung ist möglich, aber eine Variable, die außerhalb der eval-Funktion deklariert wurde, kann trotzdem nicht verwendet werden.

var indirectEval = eval;
indirectEval("var testvar = 10;");
document.write(testVar);

Dieser Code verursacht den Fehler SCRIPT5009: 'testVar' ist nicht definiert.

Arguments als Bezeichner

Die Zeichenfolge "arguments" kann nicht als Bezeichner (Variablen- oder Funktionsname, Parametername, usw.) verwendet werden.

SCRIPT1042: Ungültige Verwendung von "arguments" im Strict-Modus

var arguments = 10;

arguments innerhalb einer Funktion

Die Werte von Membern des lokalen arguments-Objekts können nicht geändert werden.

function testArgs(oneArg) {
    arguments[0] = 20;
}

Außerhalb des Strict-Modus kann der Wert des Parameters oneArg geändert werden, indem der Wert von arguments[0] so angegeben wird, dass der Wert von oneArg und arguments[0] 20 lautet. Im Strict-Modus hat das Ändern des Werts von arguments[0] keine Auswirkung auf den Wert von oneArg, da es sich beim arguments-Objekt lediglich um eine lokale Kopie handelt.

arguments.callee

Nicht zulässig.

function (testInt) {
    if (testInt-- == 0)
        return;
    arguments.callee(testInt--);
}

with

Nicht zulässig.

SCRIPT1037: "with"-Anweisungen sind im Strict-Modus nicht zulässig

with (Math){
    x = cos(3);
    y = tan(7);
}
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Vielen Dank für Ihr Feedback.

Community-Beiträge

Anzeigen:
© 2015 Microsoft