Javascript "use strict" Nedir?

Javascript "use strict" Nedir?
Time4VPS - VPS hosting in Europe

Bazı Javascript kütüphanelerinde gördüğümüz bu "use strict" nedir?

"use strict" tanımı js motorlarına ve tarayıcılara katı kuralları devreye sokmaya zorlar. Normal modda çalışan js motorları ve tarayıcılar bazı ufak hataları görmezden gelirken, katı modda çalıştıklarında hiç bir kusuru görmezden gelmezler.

Bütün uygulamalarınızda kullanmanızı tavsiye ederim

İsterseniz javascript dosyasınızın başında "use strict" ifadesi ekleyerek bütün dosyayı, isterseniz fonksiyon başında ekleyip sadece bir fonksiyonu katı modda çalıştırabilirsiniz.

Dosya başında:

"use strict";
var title = "deneme";

Fonksiyon başında:

function test(){
     "use strict";
     var title = "deneme";
}

"use strict" Kullanınca Neler Değişir?

"use strict" kullandığınız zaman tanımlanmamış değişkenler kullanamazsınız.

"use strict";
title = "deneme";
// Konsolda "Uncaught ReferenceError: deneme is not defined" hatasını verecek ve kod duracaktır.

Bir değişken, nesne ve fonksiyon silemezsiniz.

"use strict";
var title = "deneme";
delete title;
// Konsolda "Uncaught SyntaxError: Delete of an unqualified identifier in strict mode." hatasını verecek ve kod duracaktır.


function deneme(){
return "deneme";
}
delete deneme;
// Konsolda "Uncaught SyntaxError: Delete of an unqualified identifier in strict mode." hatasını verecek ve kod duracaktır.

Fonksiyon parametrelerinde aynı isimleri kullanamazsınız.

"use strict";

function deneme(title, title) {
console.log(title);
};

deneme("abc","def");

//Konsolda "Uncaught SyntaxError: Duplicate parameter name not allowed in this context" hatasını verecek ve kod duracaktır.

Sekizlik sayısal değerler kullanamazsınız.

"use strict"; 
var x = 010; 
//Uncaught SyntaxError: Octal literals are not allowed in strict mode.

Escape (kaçış) karakterini kullanamazsınız.

"use strict";
var x = "\010";
//Uncaught SyntaxError: Octal escape sequences are not allowed in strict mode.

Readonly (salt okunur) özelliklere değer atayamazsınız.

"use strict";
var nesne = {};
Object.defineProperty(obj, "title", {
    value: "yok",
    writable: false
});
obj.title = "deneme";
//Uncaught TypeError: Cannot assign to read only property 'title' of object '#<Object>'

Bir getter yöntemi kullanılarak okunan bir değişkene değer veremezsiniz. setter yada fonksiyon kullanmalısınız.

"use strict";
var nesne = {
    get title() {
        return "bos"
    }
};
obj.title = "deneme";
//Uncaught TypeError: Cannot set property title of #<Object> which has only a getter

Prototype gibi kalıcı özellikleri silemezsiniz.

"use strict"; 
delete Object.prototype;
 //Uncaught TypeError: Cannot delete property 'prototype' of function Object() { [native code] }

Değişken ve nesne adları olarak "eval" ve "arguments" isimlerini kullanamazsınız.

"use strict"; 
var eval = 4;
//Uncaught SyntaxError: Unexpected eval or arguments in strict mode


"use strict"; 
var arguments = "deneme";
//Uncaught SyntaxError: Unexpected eval or arguments in strict mode

With ifadesini kullanamazsınız.

"use strict"; 
with (Math){a = cos(2)};
//Uncaught SyntaxError: Strict mode code may not include a with statement

eval() içinde fonksiyon ve değişken oluşturamazsınız.

"use strict"; 
eval ("var title = deneme"); 
alert (title);
//Uncaught ReferenceError: title is not defined

Tarih: