엄격한 모드 '엄격한 사용'이 적용되는지 확인해야하며, 엄격 모드와 다른 모드에서 다른 코드를 실행하고 싶습니다. 엄격 모드에있을 때 전역 메서드 내에서 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
예, this
은 'undefined'
입니다.
function isStrictMode() {
return (typeof this == 'undefined');
}
function isStrictMode() {
try{var o={p:1,p:2};}catch(E){return true;}
return false;
}
을
이미 답변을 얻은 것처럼 보입니다. 그러나 나는 이미 약간의 코드를 썼다. 그래서 여기
내가 어떤 상황에서 예외를 사용하여 작동하지 않는 것을 선호뿐만 아니라 글로벌 한 :
var mode = (eval("var __temp = null"), (typeof __temp === "undefined")) ?
"strict":
"non-strict";
그것은에 새로운 변수를 도입하지 않는 eval
엄격 모드에서 사실을 사용 외부 문맥.
호기심에서 벗어나 2015 년에 방탄복이 얼마나 ES6가 여기에 오게 되었습니까? –
최신 크롬 및 노드에 대한 ES6에서 작동하는지 확인합니다. –
우아하고 일하고 있습니다, 고마워요! – rudyryk
더 우아한 방법 : "이"개체 인 경우, 사실
"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)
}
위대한로 변환. 이것은 우아하고 모든 곳에서 작동합니다. –
설명을 위해 return 문은'return this === undefined'와 동일하며 전역 객체와 비교하지 않습니다. 단지'this'가 있는지 확인하는 것입니다. – aljgom