ਜ਼ਰੂਰੀ ਸਖਤ ਮੋਡ
- ਪਿਛਲਾ ਪੰਨਾ JS Hoisting
- ਅਗਲਾ ਪੰਨਾ JS this ਕੀਵਰਡ
"use strict";
ਜ਼ਰੂਰੀ ਸਕ੍ਰਿਪਟ ਨੂੰ "ਸਖਤ ਮੋਡ" ਵਿੱਚ ਚਲਾਉਣਾ ਹੈ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ。
"use strict" ਇਨਡਰੈਕਸ
"use strict"
ਹੈ ਜ਼ਰੂਰੀ 1.8.5 ਵਿੱਚ ਦਾ ਨਵਾਂ ਇਨਡਰੈਕਸ (ECMAScript version 5)।
ਇਹ ਇੱਕ ਸਟੇਟਮੈਂਟ ਨਹੀਂ ਹੈ, ਬਲਕਿ ਇੱਕ ਟੈਕਸਟ ਐਕਸਪ੍ਰੈਸ਼ਨ ਹੈ, ਜਿਸਨੂੰ ਪੁਰਾਣੇ ਸੰਸਕਰਣਾਂ ਦਾ ਜ਼ਰੂਰੀ ਸਮੱਸਿਆ ਨਹੀਂ ਮਾਨਿਆ ਗਿਆ ਹੈ।
"use strict";
ਦਾ ਮਕਸਦ ਹੈ ਕਿ ਜ਼ਰੂਰੀ ਸਕ੍ਰਿਪਟ ਨੂੰ "ਸਖਤ ਮੋਡ" ਵਿੱਚ ਚਲਾਉਣਾ ਹੈ。
ਸਖਤ ਮੋਡ ਵਿੱਚ, ਤੁਸੀਂ ਉਦਾਹਰਣ ਵਜੋਂ, ਐਲਾਨ ਨਹੀਂ ਕੀਤੇ ਗਏ ਵਾਰੀਅਬਲ ਦਾ ਉਪਯੋਗ ਨਹੀਂ ਕਰ ਸਕਦੇ।
ਹੇਠ ਲਿਖੇ ਵਰਜਨਾਂ ਦੇ ਬਰਾਉਜ਼ਰ ਸਖਤ ਮੋਡ ਨੂੰ ਸਮਰਥਨ ਕਰਦੇ ਹਨ:
- ਵਰਜਨ 10 ਤੋਂ ਬਾਅਦ ਦੇ ਆਈਈ
- ਵਰਜਨ 4 ਤੋਂ ਬਾਅਦ ਦੇ ਫਾਇਰਫਾਕਸ
- ਵਰਜਨ 13 ਤੋਂ ਬਾਅਦ ਦੇ ਚਰੋਮ
- ਵਰਜਨ 5.1 ਤੋਂ ਬਾਅਦ ਦੇ ਸਫਾਰੀ
- ਵਰਜਨ 12 ਤੋਂ ਬਾਅਦ ਦੇ ਓਪਰਾ
ਸਖਤ ਮੋਡ ਵਿੱਚ ਐਲਾਨ ਕਰੋ
ਸਕ੍ਰਿਪਟ ਜਾਂ ਫੰਕਸ਼ਨ ਦੇ ਸ਼ੁਰੂ ਵਿੱਚ ਜੋੜ ਕੇ "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"; ਗਰੈਮੈਟਿਕ
ਸਖਤ ਮੋਡ ਦੀ ਗਰੈਮੈਟਿਕ ਹੋਰ ਪੁਰਾਣੀਆਂ ਸੰਸਕਰਣਾਂ ਦੇ ਜ਼ਰੂਰੀ ਸਮੱਸਿਆ ਨਾਲ ਸਮਾਯੋਜਿਤ ਹੈ।
ਜ਼ਰੂਰੀ ਸਮੱਸਿਆ ਹੋਵੇਗੀ ਨਹੀਂ ਜੇਕਰ ਤੁਸੀਂ ਜ਼ਰੂਰੀ ਜ਼ਿਆਦਾ ਕਿਸਮ ਦੇ ਲਾਂਚ ਕਰੋ (ਜਿਵੇਂ 4+5) ਜਾਂ ਸਟਰਿੰਗ ਲਾਂਚ ਕਰੋ (\
所有 "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 ਦਾ ਮੁੱਲ ਗਲੋਬਲ ਆਬਜੈਕਟ ਹੁੰਦਾ ਹੈ।ਸਖਤ ਮੋਡ ਵਿੱਚ ਹੁਣ ਉਹ undefined
。
ਭਵਿੱਖ ਲਈ ਸੁਰੱਖਿਆ
ਸਖਤ ਮੋਡ ਵਿੱਚ ਭਵਿੱਖ ਲਈ ਰਾਖਵੀ ਕੀਤੇ ਗਏ ਕੀਵਰਡਾਂ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ।ਉਹ ਹਨ:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict"; var public = 1500; // ਇਹ ਗਲਤੀ ਪੈਦਾ ਕਰੇਗਾ
ਚਿਤਾਵਨੀ
"use strict"
ਨਿਰਦੇਸ਼ ਸਿਰਫ ਸਕ੍ਰਿਪਟ ਜਾਂ ਫੰਕਸ਼ਨ ਵਿੱਚ ਹੀ ਵਰਤੇ ਜਾ ਸਕਦੇ ਹਨਸ਼ੁਰੂ ਵਿੱਚਪਛਾਣਿਆ ਗਿਆ ਹੈ。
- ਪਿਛਲਾ ਪੰਨਾ JS Hoisting
- ਅਗਲਾ ਪੰਨਾ JS this ਕੀਵਰਡ