Có cách nào để kiểm tra xem chế độ nghiêm ngặt 'sử dụng nghiêm ngặt' có được thực thi không và chúng tôi muốn thực thi mã khác cho chế độ nghiêm ngặt và mã khác cho chế độ không nghiêm ngặt. Tìm kiếm chức năng như isStrictMode();//boolean
Có cách nào để kiểm tra xem chế độ nghiêm ngặt có được thực thi không?
Trả lời
Thực tế là this
bên trong một hàm gọi là trong bối cảnh toàn cầu sẽ không trỏ đến đối tượng toàn cầu có thể được sử dụng để phát hiện chế độ nghiêm ngặt:
var isStrict = (function() { return !this; })();
Demo:
> echo '"use strict"; var isStrict = (function() { return !this; })(); console.log(isStrict);' | node
true
> echo 'var isStrict = (function() { return !this; })(); console.log(isStrict);' | node
false
Yep, this
là 'undefined'
trong một phương pháp toàn cầu khi bạn ở chế độ nghiêm ngặt.
function isStrictMode() {
return (typeof this == 'undefined');
}
function isStrictMode() {
try{var o={p:1,p:2};}catch(E){return true;}
return false;
}
Có vẻ như bạn đã có câu trả lời. Nhưng tôi đã viết một số mã. Vì vậy, đây
Điều này là tốt hơn so với câu trả lời của Mehdi vì nó sẽ làm việc ở khắp mọi nơi, không chỉ trong phạm vi toàn cầu. Upped. :) – mgol
Điều này dẫn đến lỗi cú pháp, xảy ra trước khi mã chạy, vì vậy nó không thể bị bắt ... – skerit
Điều này sẽ không hoạt động trong ES6 hoặc khi kiểm tra được loại bỏ để cho phép tên thuộc tính được tính toán. –
tôi thích một cái gì đó mà không sử dụng ngoại lệ và làm việc tại bất kỳ bối cảnh, không chỉ toàn cầu một:
var mode = (eval("var __temp = null"), (typeof __temp === "undefined")) ?
"strict":
"non-strict";
Nó sử dụng thực tế trong chế độ nghiêm ngặt eval
không giới thiệu một biến mới vào bối cảnh bên ngoài.
Chỉ cần ra khỏi tò mò, làm thế nào là chống đạn này trong năm 2015, bây giờ ES6 là ở đây? –
Tôi xác minh rằng nó hoạt động trong ES6 trên chrome và nút mới nhất. –
Thanh lịch và làm việc, cảm ơn bạn! – rudyryk
cách gửi thanh lịch: nếu "này" là đối tượng, chuyển đổi nó thành true
"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)
}
- 1. Tắt chế độ nghiêm ngặt của MySQL
- 2. Không thể kiểm tra biến phạm vi khi sử dụng chế độ nghiêm ngặt
- 3. Cách nhận người gọi từ chế độ nghiêm ngặt?
- 4. Các vectơ có nghiêm ngặt hơn khi kiểm tra các giới hạn ngoài mảng đống không?
- 5. Làm cách nào để kiểm tra xem tệp có thể thực thi trong node.js không?
- 6. Làm cách nào để kiểm tra nghiêm ngặt một trang web?
- 7. Chế độ nghiêm ngặt: Thay thế cho arguments.callee.length?
- 8. kiểm tra xem tệp có thể thực thi
- 9. Bất kỳ cách nào để buộc chế độ nghiêm ngặt trong nút?
- 10. Cách kiểm tra xem JCheckBox có được kiểm tra không?
- 11. Kiểm tra xem mã có thực hiện ở chế độ gỡ lỗi
- 12. Biến toàn cầu ở chế độ nghiêm ngặt JavaScript
- 13. FILTER_VALIDATE_URL có quá nghiêm ngặt không?
- 14. Cách ghi đè hàm.length để trả về độ dài của mảng, ở chế độ nghiêm ngặt
- 15. "chế độ nghiêm ngặt" là gì và được sử dụng như thế nào?
- 16. vi phạm chế độ nghiêm ngặt liệt kê
- 17. Chế độ nghiêm ngặt của PHPUnit làm gì?
- 18. Làm cách nào để kiểm tra xem Chế độ xem có tồn tại trong Cơ sở dữ liệu không?
- 19. Làm thế nào để kiểm tra xem chế độ phụ (.e.g chế độ flymake) có bật không?
- 20. PHPUnit chế độ nghiêm ngặt - cách thay đổi thời gian chờ mặc định
- 21. Có cách nào để kiểm tra đơn vị thuộc tính ASP.NET MVC ViewBag được đặt trong chế độ xem không?
- 22. Làm cách nào để kiểm tra xem chế độ xem phương thức hiện có trên self.window.rootViewController của tôi không?
- 23. Tại sao xóa không được cho phép trong chế độ nghiêm ngặt Javascript5?
- 24. Mục tiêu-C: kiểm tra xem chế độ xem có chạm vào một chế độ xem khác
- 25. xHTML 1.0 nghiêm ngặt - Xác thực iFrames
- 26. Django cách kiểm tra xem đối tượng có thuộc tính trong chế độ xem
- 27. Kiểm tra mức độ phụ thuộc nghiêm ngặt của Android trong SDK 17
- 28. Tôi có nên tránh không kiểm tra trong chế độ xem Rails không?
- 29. Cách kiểm tra thư mục để kiểm tra xem tệp mới có được thêm vào không?
- 30. Có cách nào để làm cho simplejson kém nghiêm ngặt hơn không?
vĩ đại. Điều này là thanh lịch và hoạt động ở khắp mọi nơi. –
Để làm rõ, câu lệnh return tương đương với 'return this === undefined', nó không so sánh nó với đối tượng toàn cầu, nó chỉ kiểm tra nếu' this' tồn tại. – aljgom