// Strict Mode - подмножество JS, которое появилось в ES5.
// Существует для устранения слабых мест в языке для упрощения отладки и повышения безопасности.
// Инструкция with - плохая часть языка JS, поэтому в strict mode она запрещена.
// Если мы запустим этот код после дерективы use strict, то получим ошибку.
// 'use strict';
var obj = {
name: "Alfred"
};
with(obj) {
console.log(name); // Alfred в обычном режиме или SyntaxError: strict mode code may not contain 'with' statement
}
// Директива use strict может быть прописана вначале файла или любой функции (в этом случае режим распространяется на функцию).
// Обычно в функциях, которые вызываются не как методы каких-либо объектов, this указывает на глобальный объект.
var func = function() {
console.log(this);
};
func(); // Window → file:///D:/%D0%AF%D0%97%D0%AB%D0%9A%D0%98_%D0%9F%D0%9B%D0%90%D0%9D/!SORAX_JS/www/index.html
// В strict mode this указыват на undefined
// В strict mode все переменные должны быть обязательно объявлены.
city = "New York";
console.log(city); // New York или ошибка в strict mode
console.log(window.city); // New York или ошибка в strict mode
// Например, у нас есть объект доступный только для чтения.
// При попытке изменить этот объект у нас ничего не произойдет,а в strict mode вызовет ошибку TypeError
var object = {};
Object.defineProperty(object, "gender", {
value: "male",
writable: false
});
console.log(object.gender); // male
object.gender = "female";
console.log(object.gender); // male
// Также получим ошибку, если после preventExtensions мы добавим свойство.
// Или попробуем удалить свойство с configurable: false
// В литералах объекта в SM не может быть несколько свойств с одним и тем же именем. В обычном режиме ошибки не будет.
var object = {
name: "John",
name: "Bruce"
};
// В SM запрещены восмеричные числа по причине их ненадобности.
var octal = 0251;
console.log(octal); // 169 в обычном режиме
// Существует для устранения слабых мест в языке для упрощения отладки и повышения безопасности.
// Инструкция with - плохая часть языка JS, поэтому в strict mode она запрещена.
// Если мы запустим этот код после дерективы use strict, то получим ошибку.
// 'use strict';
var obj = {
name: "Alfred"
};
with(obj) {
console.log(name); // Alfred в обычном режиме или SyntaxError: strict mode code may not contain 'with' statement
}
// Директива use strict может быть прописана вначале файла или любой функции (в этом случае режим распространяется на функцию).
// Обычно в функциях, которые вызываются не как методы каких-либо объектов, this указывает на глобальный объект.
var func = function() {
console.log(this);
};
func(); // Window → file:///D:/%D0%AF%D0%97%D0%AB%D0%9A%D0%98_%D0%9F%D0%9B%D0%90%D0%9D/!SORAX_JS/www/index.html
// В strict mode this указыват на undefined
// В strict mode все переменные должны быть обязательно объявлены.
city = "New York";
console.log(city); // New York или ошибка в strict mode
console.log(window.city); // New York или ошибка в strict mode
// Например, у нас есть объект доступный только для чтения.
// При попытке изменить этот объект у нас ничего не произойдет,а в strict mode вызовет ошибку TypeError
var object = {};
Object.defineProperty(object, "gender", {
value: "male",
writable: false
});
console.log(object.gender); // male
object.gender = "female";
console.log(object.gender); // male
// Также получим ошибку, если после preventExtensions мы добавим свойство.
// Или попробуем удалить свойство с configurable: false
// В литералах объекта в SM не может быть несколько свойств с одним и тем же именем. В обычном режиме ошибки не будет.
var object = {
name: "John",
name: "Bruce"
};
// В SM запрещены восмеричные числа по причине их ненадобности.
var octal = 0251;
console.log(octal); // 169 в обычном режиме
Комментариев нет:
Отправить комментарий