Javascript'in Strict Mode ve Faydalarını Anlamak
JavaScript, web'deki en yaygın kullanılan programlama dillerinden biri olarak, her şeyi basit etkileşimli formlardan karmaşık tek sayfa uygulamaları için güçlendiriyor.Projeler boyut ve takım artış üyeleri olarak, güvenilir, öngörülebilir kod için ihtiyaçlar önemli hale gelir.Bu, JavaScript'in sıkı modunda - ECMAScript 5'te tanıtıldığı yer - daha önce sessiz bir şekilde, dil alışkanlıklarını kısıtlama ve yaygın hataları yakalamaya yardımcı olur.
Strict Mode nedir?
Strict modu, JavaScript'in daha disiplinli bir alt setini seçmenin bir yoludur.Örneğin, JavaScript motoru, "sloppy modu" olarak adlandırılan bir dizi kısıtlama altında kod çalışır, dilin bazı özelliklerini daha fazla hatayla ilgili olarak küresel değişken yaratır.InsightT:0, bu tür, kesin olmayan kodlar veya sabit olmayan kodlar için kullanımlar için.
ECMAScript 5 2009 yılında, geri uyumluluk olmadan dili geliştirmenin bir yolu olarak katı mod tanıttı. Geliştiriciler yeni, katı davranışlara tercih edebilir ve herhangi bir profesyonel JavaScript geliştirici için ne kadar sıkı bir şekilde çalışır.
Enable Strict Mode
Bu yönerge basit bir ifade değildir: motorun daha sıkı modda uygulanmasına izin verirsiniz: küresel olarak (tüm bir senaryo için) veya yerel olarak (bir tek bir işlev için) uygulanabilir.Bu yönerge, motorun daha sonra kodun daha açık bir şekilde uygulanmasına izin verilmez.
Senaryo-Level Strict Mode
Tüm JavaScript dosyası veya lineer olmayan bir dosya için katı mod etkinleştirin, yerETHFLT:6, senaryonun ilk satırı olarak (başka bir ifadeden önce)
// script.js
'use strict';
var x = 10;
console.log(x); // works normally
// Attempting to use undeclared variables throws an error
y = 20; // ReferenceError: y is not defined
Küresel olarak uygulandığında, katı mod bu senaryo dosyasında tüm kodu etkiler. Birden çok senaryoyu kapsanız, sadece bunu yapanlar katı modda çalıştıracaktır. sıkı bir mod senaryoyu kullanarak aynı dosyada karıştıramaz.
Fonksiyonlar-Level Strict Mode
Ayrıca belirli bir işlevin içinde katı modu da kullanabilirsiniz, senaryonun geri kalanının yanı sıra sert bir modda veya sadece belirli işlevleri kontrol ettiğinizden emin olabilirsiniz. PlaceurFLT:9 başka herhangi bir ifadeden önce:
function strictFunction() {
'use strict';
// Inside this function, strict mode applies
var a = 1;
b = 2; // ReferenceError: b is not defined
}
function sloppyFunction() {
// Outside strictFunction, sloppy mode still applies
c = 3; // creates global variable c
}
Fonksiyonlar-düzeltme sadece işlevin kendi kodu için geçerli, herhangi bir ihmal fonksiyonuna değil (ayrıca bunu ifade etmezler)). Ancak, pratikte, dosya seviyesindeki sıkı modlar için yaygındır.
Modüller ve Sınıflar
ES6 (ES2015), JavaScript modüller ve sınıflar ortaya koyar. Her ikisi de varsayılan olarak katı modda otomatik olarak uygulanır. Bu nedenle, kodunızı kullanarak yazmanız gerekir.[DÜcretsiz: 9) Sözcükler veya tanımlayın aİLETİŞKİNCÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜN
// module.js (no 'use strict' needed)
export function add(a, b) {
// strict mode is active here
return a + b;
}
// class definition (strict mode active)
class MyClass {
constructor(value) {
this.value = value;
}
}
Bu otomatik uygulama, modüllerde ve sınıflarda kodlar ve temel olarak daha güvenli ve daha kolay bir şekilde anlaşılmasını sağlar.
Strict Mode kullanarak Anahtar Faydaları
Strict modu, doğrudan kod kalitesini, güvenliğini ve geliştirici deneyimini geliştirmek için bir takım avantajlar sunar. Her faydayı ayrıntılı olarak inceleyelim.
Kaza Küresel Değişkenleri Önlemek
In non-strict modunda, tipografik hataları veya unutulmuş bildirimler için bir değer tayin etmek, küresel nesne üzerinde bir mülk yaratır ([DÜT:17) tarayıcılarda, 03: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00: 00:) Bu, · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·
// Non-strict: silently creates global variable
function setup() {
developer = "Alice"; // accidentally global
}
// Strict: throws ReferenceError
function setup() {
'use strict';
developer = "Alice"; // ReferenceError: developer is not defined
}
Bu uygulama güçleri, ilgili böcekleri kapsamak için değişkenleri açıkça ifade eder. ”, [[DörtÜye, veya [[DÜyetimli böceklere karşı koruma sağlar.
Eliminates Silent Hataları
JavaScript genellikle operasyonların sessiz bir şekilde başarısız olduğu zaman bağışlayıcıdır. Örneğin, okuma-sadece mülke (örneğin, donmuş bir nesne gibi) sadece bir yanlışlık modunda değildir.Bu, geliştirici hemen geri bildirim alır.
// Non-strict: assignment silently fails
var obj = Object.freeze({name: "Bob"});
obj.name = "Charlie"; // silently ignored
// Strict: TypeError thrown
'use strict';
var obj = Object.freeze({name: "Bob"});
obj.name = "Charlie"; // TypeError: Cannot assign to read-only property 'name'
Parametre İsimlerini Çözmek
In non-strict modunda, fonksiyonlar tekrar parametre isimlerine sahip olabilir, bu da kafa karıştırıcı davranışlara yol açabilir (son tekrar tekrarlananlar daha öncekileri). Strict modunda bunu yasaklar, parse zamanında aTAY:29).
// Non-strict: allowed
function sum(a, a, c) {
return a + a + c; // a equals the second argument passed
}
// Strict: SyntaxError
'use strict';
function sum(a, a, c) { // SyntaxError: Duplicate parameter name not allowed in strict mode
return a + a + c;
}
Bu kısıtlama, parametrelerin yazmasını engellemeye yardımcı olur, fonksiyon imzalarını daha net ve daha az hata-prone yapar.
Kur'an'ın Kur'an'ı Kerim'de
[FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=FONT=
MakesFLT:35) Safer
In non-strict modunda, [[Dint|Dint|t 36|) Bu nedenle değişkenleri yalnızca evsel kod içinde yaratırlar - kod daha kolay hale getirir ve kazara kirliliği önlemeyi engelleyebilirler.
// Non-strict: eval creates variable in outer scope
var x = 1;
eval("var x = 2;");
console.log(x); // 2
// Strict: eval has its own scope
'use strict';
var x = 1;
eval("var x = 2;");
console.log(x); // 1
Prohibits Octal Numeric Literals
Tarihsel olarak, JavaScript, lider bir sıfır ile sayıları yorumladı (örneğin ES6+UTT:40 eki hariç) ve özellikle de "010" gibi dizelerle uğraşırken, bir dizi ince fiilin ortadan kaldırılmasına neden oldu.
// Non-strict: 010 means octal 8
console.log(010); // 8
// Strict: SyntaxError
'use strict';
console.log(010); // SyntaxError: Octal literals are not allowed in strict mode
Deleting Plain Değişkenleri
In non-strict modunda, değişkenleri veya işlev bildirimlerini silmek için deneyebilirsin, ancak operasyon sessiz bir şekilde başarısız olur (): Strict modunda aİLFLT:45 atarsanız, düz bir değişken, işlev veya işlev parametreyi silmek için çalışırsınız.
// Non-strict: attempt silently fails
var a = 1;
delete a; // false; a still exists
// Strict: SyntaxError
'use strict';
var a = 1;
delete a; // SyntaxError: Delete of an unqualified identifier in strict mode
Ek Güvenlik ve Performans İyileştirmeleri
Belirli kısıtlamalar ötesinde, katı mod JavaScript motorlarının bazı durumlarda daha hızlı infaz yapabilmelerini sağlar. Çünkü katı mod bazı dinamik davranışlar ortadan kaldırır (örneğin, dolaylı olarak küreseller için kullanılan güvenlik riskleri, bazı durumlarda daha hızlı uygulama yapabilmelerini sağlar.Bu kısıtlamalar, belirli tür saldırıların üstesinden gelmek ve bazı saldırıların önlenmesini engelleyebilir.
Eylemde Strict Mode'nin Pratik Örnekleri
Katı anlamayı sağlamak için, sıkı modla kontrast ince modu olan bir dizi örnekle yürüyelim. Bunlar acil geri bildirim katı modu sağlar.
Örnek 1: Undeclared Değişken Assignment
// sloppy.js
function userInfo() {
name = "John"; // silently creates global 'name'
}
userInfo();
console.log(window.name); // "John" (in browsers)
// strict.js
'use strict';
function userInfo() {
name = "John"; // ReferenceError: name is not defined
}
userInfo();
katı mod olmadan, a simple tipo gibiFLT:51’ye göre, örneğin, küresel kapsamı kirletebilir. katı modla, hata anında yakalanır.
Örnek 2: Bir Okumaya Hazırlanma – Sadece Global Property
// sloppy mode
undefined = 5; // silently fails (undefined remains undefined)
NaN = 6; // silently fails
console.log(undefined, NaN); // undefined, NaN
// strict mode
'use strict';
undefined = 5; // TypeError: Cannot assign to read-only property 'undefined' of object '#<Window>'
NaN = 6; // TypeError
Strict modu, asla değişmemesi gereken küresel sabitlerin tekrarlanmasını engeller, runtime ortamının bütünlüğünü korumaya yardımcı olur.
Örnek 3: Object Property Names
Katı modda, nesnellerinde mülk isimleri bir İLDİYİMÖYLE KAYNAKLAR KAYNAKLAR KAYNAKLAR KAYNAKLARI: Bu, yapılandırma nesneleri veya kopyalama kodunda hataları tespit etmek özellikle yararlıdır.
// sloppy: works, last value wins
var config = {
host: "example.com",
host: "backup.com" // no error
};
console.log(config.host); // "backup.com"
// strict: SyntaxError
'use strict';
var config = {
host: "example.com",
host: "backup.com" // SyntaxError: Duplicate data property in object literal not allowed in strict mode
};
Ortak Pitfalls ve Strict Mode'ye Migrating
Katı mod birçok fayda getirirken, mevcut büyük bir kod tabanını taklit etmek, ES3/5'de kabul edilebilir olarak kabul edilen bazı eski kalıpları şimdi başarısız olabilir.En yaygın konular şunlardır:
- [FONT:0]Undeclared değişken atamalar[Dönetici: Iklimli küresellere güvenmek değişkenleri ilan etmek için güncellenmelidir.
- [FONT:0)UsingÖRÜSÜSÜSÜSÜSÜSÜSÜSÜSÜSÜSÜSÜSÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜ: 0: 0: 13)
- [FONT:0]Tamamen gerçekler[[Dönemli: 1) Değiştirilir: [[[FONT:0) veya decimalur:FLT:59).
- [FONT:0) AccessingurFLT:60]: Bu, bir şekilde işlev ifadelerini kullanmak.
- [FONT:0)Dokuz parametre isimleri[Dönetici: kaldırılmalıdır veya yeniden adlandırılmalıdır.
- [FONT:0)UsingİLFLT:61 değişken veya fonksiyonlarda [Dönetici: 1): Bu işlem yasak.
Göç süreci genellikle artacaktır. katı modu fonksiyonunun işlevlerinin-işlevini kullanarak işlev-işlev:62) pragma işlevleri içinde test edin, test iyice test edin ve sonra küresel olarak ESLint gibi araçlardan emin olabilirsiniz.
Aynı zamanda katı modun performans katili olmadığı da dikkat çekiyor. Aslında, belirtildiği gibi, bazı motorlar daha sıkı mod kodu daha iyi optimize edebilir. yönerge için ilk runtime check for the yönerge is negable, and the total code net and security far outweigh any marjinal maliyet.
Sonuç ve En İyi Uygulamalar
JavaScript'in sıkı modu, daha sağlam, kullanılabilir ve güvenli bir kod yazmak için güçlü bir araçtır.Bu dilin sınırlı alt setine bakarak, geliştiriciler küresel inşalardan ve birçok durumda daha iyi performanstan yararlanın.Enabling modu, ek olarak basit ve doğru bir şekilde ifade edilir:64 - ES modüller ve sınıflarda otomatik olarak aktif olarak tercüme edilir.
Herhangi bir proje için, yeni veya mirasın, sıkı bir şekilde benimsenmesi, ihlalleri tanımlamak için bir linter kullanarak başlayın, onları yavaşlayın ve sık sık test edin. Modern JavaScript araçları ve çerçeveler genellikle sıkı modları varsayılır (veya uygular), bu kongre ile uyumlu hale getirmek, daha sıkı bir şekilde uyum ve tutarlılık sağlar.
Daha derin bir şekilde, [[Dönetici:0) ^ ^ ^ ^ (İngilizce). For historical context, theTELT:2).ECMAScript spesifik) Resmi kuralları açıklar. ek olarak, [Düzük kuralı[Düzük kuralı[Dönlendirmek için otomatik bir yol sunar[Dönergelik ve örnekleme: 2) Projeniz boyunca bir alışkanlık, kod güvenilirlik ve geliştirici üretkenliği ödeme yapar.