Чи є який-небудь спосіб перевірити, чи дотримується суворий режим «використовувати строгий», і ми хочемо виконати інший код для суворого режиму та інший код для несуворого режиму. Шукаю функцію типуisStrictMode();//boolean
Чи є який-небудь спосіб перевірити, чи дотримується суворий режим «використовувати строгий», і ми хочемо виконати інший код для суворого режиму та інший код для несуворого режиму. Шукаю функцію типуisStrictMode();//boolean
Відповіді:
Той факт, що this
всередині функції, що викликається в глобальному контексті, не буде вказувати на глобальний об'єкт, може бути використаний для виявлення суворого режиму:
var isStrict = (function() { return !this; })();
Демо:
> echo '"use strict"; var isStrict = (function() { return !this; })(); console.log(isStrict);' | node
true
> echo 'var isStrict = (function() { return !this; })(); console.log(isStrict);' | node
false
Я віддаю перевагу чомусь, що не використовує винятки і працює в будь-якому контексті, не лише глобальному:
var mode = (eval("var __temp = null"), (typeof __temp === "undefined")) ?
"strict":
"non-strict";
Він використовує той факт, що в суворому режимі eval
не вводить нову змінну у зовнішній контекст.
--use_strict
прапором / без нього .
function isStrictMode() {
try{var o={p:1,p:2};}catch(E){return true;}
return false;
}
Схоже, ви вже отримали відповідь. Але я вже написав якийсь код. Так ось
Так, this
це 'undefined'
всередині глобального методу, коли ви перебуваєте в суворому режимі.
function isStrictMode() {
return (typeof this == 'undefined');
}
Більш елегантний спосіб: якщо "це" є об'єктом, перетворіть його на істину
"use strict"
var strict = ( function () { return !!!this } ) ()
if ( strict ) {
console.log ( "strict mode enabled, strict is " + strict )
} else {
console.log ( "strict mode not defined, strict is " + strict )
}
Багато відповідей тут декларують функцію для перевірки на суворий режим, але така функція нічого не скаже вам про область, з якої вона була викликана, лише область, в якій вона була оголошена!
function isStrict() { return !this; };
function test(){
'use strict';
console.log(isStrict()); // false
}
Те саме з викликами між тегами.
Отже, коли вам потрібно перевірити суворий режим, вам потрібно написати весь чек у цій області:
var isStrict = true;
eval("var isStrict = false");
На відміну від найголоснішої відповіді, ця перевірка Яроном працює не лише в глобальному масштабі.
return this === undefined
, це не порівняння його з глобальним об'єктом, це просто перевірка, чиthis
існує.