खोज…
वाक्य - विन्यास
- 'सख्त का उपयोग करें';
- "सख्त का उपयोग करें";
- `सख्त का उपयोग करें`;
टिप्पणियों
सख्त मोड ईसीएमएस्क्रिप्ट 5 में एक विकल्प है जो कुछ पीछे-असंगत वृद्धि को सक्षम करने के लिए है। "सख्त मोड" कोड में व्यवहार में बदलाव शामिल हैं:
- अपरिभाषित चर को असाइन करना नए वैश्विक चर को परिभाषित करने के बजाय एक त्रुटि उठाता है;
- गैर-लेखन गुण (जैसे कि
window.undefined
) को हटाने या हटाने के लिए चुपचाप निष्पादित करने के बजाय एक त्रुटि उठाता है; - लिगेसी ऑक्टल सिंटैक्स (पूर्व
0777
) असमर्थित है; - बयान के
with
असमर्थित है; -
eval
आसपास के दायरे में चर नहीं बना सकता है; - कार्य '
.caller
और.arguments
गुण असमर्थित हैं; - किसी फ़ंक्शन की पैरामीटर सूची में डुप्लिकेट नहीं हो सकते;
-
window
नहीं रह गया है स्वचालित रूप से की मान के रूप में प्रयोग किया जाता हैthis
।
ध्यान दें : - ' सख्त ' मोड डिफ़ॉल्ट रूप से सक्षम नहीं है जैसे कि कोई पृष्ठ जावास्क्रिप्ट का उपयोग करता है जो गैर-सख्त मोड की सुविधाओं पर निर्भर करता है, तो वह कोड टूट जाएगा। इस प्रकार, इसे प्रोग्रामर द्वारा स्वयं / स्वयं चालू करना होगा।
संपूर्ण लिपियों के लिए
सख्त लिपियों को "use strict";
कथन को रखकर पूरी लिपियों पर लागू किया जा सकता है "use strict";
किसी भी अन्य बयान से पहले।
"use strict";
// strict mode now applies for the rest of the script
सख्त मोड केवल उन लिपियों में सक्षम होता है जहां आप "use strict"
को परिभाषित "use strict"
। आप सख्त मोड के साथ और बिना स्क्रिप्ट को जोड़ सकते हैं, क्योंकि अलग-अलग स्क्रिप्ट के बीच सख्त स्थिति साझा नहीं की जाती है।
नोट: ES2015 + मॉड्यूल और कक्षाओं के अंदर लिखे गए सभी कोड डिफ़ॉल्ट रूप से सख्त हैं।
कार्यों के लिए
स्ट्रिक्ट मोड को "use strict";
बताकर एकल फ़ंक्शंस पर भी लागू किया जा सकता है "use strict";
समारोह घोषणा की शुरुआत में बयान।
function strict() {
"use strict";
// strict mode now applies to the rest of this function
var innerFunction = function () {
// strict mode also applies here
};
}
function notStrict() {
// but not here
}
सख्त मोड किसी भी आंतरिक कार्य किए गए कार्यों पर भी लागू होगा।
वैश्विक गुणों में परिवर्तन
एक गैर सख्त मोड गुंजाइश, जब एक चर के साथ प्रारंभ किया जा रहा बिना असाइन किया गया है में var
, const
या let
कीवर्ड, यह स्वतः ही वैश्विक क्षेत्र में घोषित किया जाता है:
a = 12;
console.log(a); // 12
हालांकि सख्त मोड में, एक अघोषित चर के लिए किसी भी पहुंच एक संदर्भ त्रुटि फेंक देंगे:
"use strict";
a = 12; // ReferenceError: a is not defined
console.log(a);
यह उपयोगी है क्योंकि जावास्क्रिप्ट में कई संभावित घटनाएं हैं जो कभी-कभी अप्रत्याशित होती हैं। गैर-सख्त-मोड में, ये ईवेंट अक्सर डेवलपर्स को विश्वास दिलाते हैं कि वे बग या अप्रत्याशित व्यवहार हैं, इस प्रकार सख्त-मोड को सक्षम करके, फेंकी गई कोई भी त्रुटि वास्तव में पता करने के लिए उन्हें लागू करती है कि क्या किया जा रहा है।
"use strict";
// Assuming a global variable mistypedVariable exists
mistypedVaraible = 17; // this line throws a ReferenceError due to the
// misspelling of variable
सख्त मोड में यह कोड एक संभावित परिदृश्य को प्रदर्शित करता है: यह एक संदर्भ त्रुटि फेंकता है जो असाइनमेंट की लाइन संख्या को इंगित करता है, जिससे डेवलपर को चर के नाम में गलत पहचान का तुरंत पता लगाने की अनुमति मिलती है।
गैर-सख्त-मोड में, इस तथ्य के अलावा कि कोई त्रुटि नहीं फेंकी गई है और असाइनमेंट सफलतापूर्वक किया गया है, mistypedVaraible
से वैश्विक चर के रूप में वैश्विक दायरे में स्वचालित रूप से घोषित किया जाएगा। इसका मतलब है कि डेवलपर को कोड में इस विशिष्ट असाइनमेंट को मैन्युअल रूप से देखने की आवश्यकता है।
इसके अलावा, चर की घोषणा को मजबूर करके, डेवलपर गलती से कार्यों के अंदर वैश्विक चर घोषित नहीं कर सकता है। गैर-सख्त-मोड में:
function foo() {
a = "bar"; // variable is automatically declared in the global scope
}
foo();
console.log(a); // >> bar
सख्त मोड में, चर को स्पष्ट रूप से घोषित करना आवश्यक है:
function strict_scope() {
"use strict";
var a = "bar"; // variable is local
}
strict_scope();
console.log(a); // >> "ReferenceError: a is not defined"
वैरिएबल को एक फंक्शन के बाहर और बाद में भी घोषित किया जा सकता है, इसका उपयोग करने की अनुमति देता है, उदाहरण के लिए, वैश्विक दायरे में:
function strict_scope() {
"use strict";
a = "bar"; // variable is global
}
var a;
strict_scope();
console.log(a); // >> bar
गुणों में परिवर्तन
सख्त मोड आपको असंगत गुणों को हटाने से भी रोकता है।
"use strict";
delete Object.prototype; // throws a TypeError
यदि आप सख्त मोड का उपयोग नहीं करते हैं, तो उपरोक्त कथन को आसानी से नजरअंदाज कर दिया जाएगा, हालांकि अब आप जानते हैं कि यह अपेक्षित रूप से निष्पादित क्यों नहीं करता है।
यह आपको गैर-एक्स्टेंसिबल संपत्ति का विस्तार करने से भी रोकता है।
var myObject = {name: "My Name"}
Object.preventExtensions(myObject);
function setAge() {
myObject.age = 25; // No errors
}
function setAge() {
"use strict";
myObject.age = 25; // TypeError: can't define property "age": Object is not extensible
}
एक समारोह की तर्क सूची की व्यवहार
arguments
वस्तु सख्त और गैर सख्त मोड में भिन्न व्यवहार करती है। गैर-सख्त मोड में, argument
ऑब्जेक्ट मौजूद मापदंडों के मूल्य में परिवर्तन को प्रतिबिंबित करेगा, हालांकि सख्त मोड में पैरामीटर के मूल्य में कोई भी परिवर्तन argument
ऑब्जेक्ट में प्रतिबिंबित नहीं होगा।
function add(a, b){
console.log(arguments[0], arguments[1]); // Prints : 1,2
a = 5, b = 10;
console.log(arguments[0], arguments[1]); // Prints : 5,10
}
add(1, 2);
उपरोक्त कोड के लिए, जब हम मापदंडों के मूल्य को बदलते हैं तो arguments
को बदल दिया जाता है। हालांकि, सख्त मोड के लिए, उसी को प्रतिबिंबित नहीं किया जाएगा।
function add(a, b) {
'use strict';
console.log(arguments[0], arguments[1]); // Prints : 1,2
a = 5, b = 10;
console.log(arguments[0], arguments[1]); // Prints : 1,2
}
यह ध्यान देने योग्य है कि, यदि कोई भी पैरामीटर undefined
, और हम पैरामीटर के मूल्य को सख्त-मोड या गैर-सख्त दोनों मोड में बदलने का प्रयास करते हैं, तो arguments
ऑब्जेक्ट अपरिवर्तित रहता है।
सख्त मोड
function add(a, b) {
'use strict';
console.log(arguments[0], arguments[1]); // undefined,undefined
// 1,undefined
a = 5, b = 10;
console.log(arguments[0], arguments[1]); // undefined,undefined
// 1, undefined
}
add();
// undefined,undefined
// undefined,undefined
add(1)
// 1, undefined
// 1, undefined
गैर-सख्त मोड
function add(a,b) {
console.log(arguments[0],arguments[1]);
a = 5, b = 10;
console.log(arguments[0],arguments[1]);
}
add();
// undefined,undefined
// undefined,undefined
add(1);
// 1, undefined
// 5, undefined
डुप्लिकेट पैरामीटर
सख्त मोड आपको डुप्लिकेट फ़ंक्शन पैरामीटर नामों का उपयोग करने की अनुमति नहीं देता है।
function foo(bar, bar) {} // No error. bar is set to the final argument when called
"use strict";
function foo(bar, bar) {}; // SyntaxError: duplicate formal argument bar
सख्त मोड में कार्य करना
स्ट्रिक्ट मोड में, स्थानीय ब्लॉक में घोषित कार्य ब्लॉक के बाहर दुर्गम हैं।
"use strict";
{
f(); // 'hi'
function f() {console.log('hi');}
}
f(); // ReferenceError: f is not defined
स्कोप-वार, स्ट्रिक्ट मोड में फ़ंक्शन डिक्लेरेशन में एक ही तरह की बाइंडिंग होती है जैसे let
या const
।
गैर-सरल पैरामीटर सूची
function a(x = 5) {
"use strict";
}
जावास्क्रिप्ट को अमान्य है और एक SyntaxError
को फेंक देगा क्योंकि आप गैर-सरल पैरामीटर सूची के साथ फ़ंक्शन में "use strict"
उपयोग नहीं कर सकते हैं जैसे कि ऊपर - डिफ़ॉल्ट असाइनमेंट x = 5
गैर-सरल मापदंडों में शामिल हैं -
- डिफ़ॉल्ट असाइनमेंट
function a(x = 1) {
"use strict";
}
- Destructuring
function a({ x }) {
"use strict";
}
- आराम करो
function a(...args) {
"use strict";
}