JavaScript 严格模式
- صفحه قبلی Hoisting JS
- صفحه بعدی واژهکلیدی JS this
"use strict";
定义 JavaScript 代码应该以“严格模式”执行。
"use strict" 指令
"use strict"
是 JavaScript 1.8.5 中的新指令(ECMAScript version 5)。
它不算一条语句,而是一段文字表达式,更早版本的 JavaScript 会忽略它。
"use strict";
的作用是指示 JavaScript 代码应该以“严格模式”执行。
在严格模式中,您无法,例如,使用未声明的变量。
以下版本的浏览器支持严格模式:
- 版本 10 以后的 IE
- 版本 4 以后的 Firefox
- 版本 13 以后的 Chrome
- 版本 5.1 以后的 Safari
- 版本 12 以后的 Opera
声明严格模式
通过在脚本或函数的开头添加 "use strict";
来声明严格模式。
在脚本开头进行声明,拥有全局作用域(脚本中的所有代码均以严格模式来执行):
实例
"use strict"; x = 3.14; // 这会引发错误,因为 x 尚未声明
实例
"use strict"; myFunction(); function myFunction() { y = 3.14; // 这会引发错误,因为 y 尚未声明 }
在函数中声明严格模式,拥有局部作用域(只有函数中的代码以严格模式执行):
x = 3.14; // 这不会引发错误 myFunction(); function myFunction() { "use strict"; y = 3.14; // 这会引发错误 }
"use strict"; 语法
声明严格模式的语法被设计为兼容更早版本的 JavaScript。
编译 JavaScript 程序中的数值文字(比如 4+5)或字符串文字("Bill Gates")不会有负面效果。它只会编译为不存在的变量然后消失。
همه "use strict";
این تنها بر تأثیر对新 ترجمههای جدید تأثیر میگذارد که معنای آن را
چرا باید حالت سختگیرانه را استفاده کنیم؟
حالت سختگیرانه به ما کمک میکند تا JavaScript
حالت سختگیرانه
به عنوان مثال، در JavaScript معمولی، خطاهای تایپی در نامهای متغیر منجر به ایجاد متغیرهای جهانی میشود. در حالت سختگیرانه، این عمل خطا ایجاد خواهد کرد، بنابراین نمیتوان متغیرهای جهانی تصادفی ایجاد کرد.
در JavaScript معمولی، اگر به ویژگیهای غیرقابل نوشتن نوشتید، توسعهدهنده هیچ خطایی دریافت نخواهد کرد.
در حالت سختگیرانه، نوشتن به ویژگیهای غیرقابل نوشتن، فقط خوانا، ناموجود، یا نوشتن به متغیرها یا شیءهای ناموجود، خطا ایجاد خواهد کرد.
موضوعات غیرمجاز در حالت سختگیرانه
استفاده از متغیر بدون اعلام آن، مجاز نیست:
"use strict"; x = 3.14; // این خطا را ایجاد خواهد کرد
شیء نیز یک متغیر است
استفاده از شیء بدون اعلام آن نیز مجاز نیست:
"use strict"; x = {p1:10, p2:20}; // این خطا را ایجاد خواهد کرد
حذف متغیر (یا شیء) مجاز نیست:
"use strict"; var x = 3.14; delete x; // این خطا را ایجاد خواهد کرد
حذف تابع مجاز نیست:
"use strict"; function x(p1, p2) {}; delete x; // این خطا را ایجاد خواهد کرد
نامهای پارامترهای تکراری مجاز نیستند:
"use strict"; function x(p1, p1) {}; // این خطا را ایجاد خواهد کرد
متنهای عددی اکوئی مجاز نیستند:
"use strict"; var x = 010; // این خطا را ایجاد خواهد کرد
کاراکترهای فرار مجاز نیستند:
"use strict"; var x = \010; // این خطا را ایجاد خواهد کرد
نوشتن به ویژگیهای فقط خوانا مجاز نیست:
"use strict"; var obj = {}; Object.defineProperty(obj, "x", {value:0, writable:false}); obj.x = 3.14; // این خطا را ایجاد خواهد کرد
نوشتن به ویژگیهای فقط خوانا مجاز نیست:
"use strict"; var obj = {get x() {return 0} }; obj.x = 3.14; // این خطا را ایجاد خواهد کرد
حذف ویژگیهای غیرقابل حذف مجاز نیست:
"use strict"; delete Object.prototype; // این خطا را ایجاد خواهد کرد
رشته "eval" نمیتواند به عنوان متغیر استفاده شود:
"use strict"; var eval = 3.14; // این خطا را ایجاد خواهد کرد
رشته "arguments" نمیتواند به عنوان متغیر استفاده شود:
"use strict"; var arguments = 3.14; // این خطا را تولید میکند
with
این جملهها مجاز نیستند:
"use strict"; with (Math){x = cos(2)}; // این خطا را تولید میکند
به دلایل امنیتی، استفاده از eval()
در محدودهای که در آن فراخوانی میشود، متغیر ایجاد میشود:
"use strict"; eval ("var x = 2"); alert (x); // این خطا را تولید میکند
در فراخوانیهای مشابه f()، مقدار this به عنوان شیء کلی است. در حالت Strict Mode، اکنون آن شده است undefined
。
مطمئن شدن از آینده
واژههای کلیدی رزرو شده برای آینده در حالت Strict Mode مجاز نیستند. آنها عبارتند از:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict"; var public = 1500; // این خطا را تولید میکند
اخطار
"use strict"
دستورات فقط میتوانند درآغازتشخیص داده شده است.
- صفحه قبلی Hoisting JS
- صفحه بعدی واژهکلیدی JS this