prompt ile kullanıcıdan bilgi
almak.localStorage ile Veri
Eklemek, Düzenlemek ve Silmebreak ve continue Kullanımıwhile DöngüsüforEach ile Array içerisindeki Öğelerin Çağrılması.filter ile Array İçerisinde Sadece İstenilen Bilgilerin Yeni Listeye Eklenmesi.map ile Array İçerisideki Yapının Değiştirilerek Yeni Liste OluşturulmasıDeğişken nedir: en basit tabirle değerleri hafızada tutmak için kullanılan yapılardır.
var DegiskenAdi = Deger
Daha sonra bu değer kullanılacağında tanımlanan DegiskenAdi doğrudan
Deger'i tanımlar. Bu şekilde kullanıldığında Deger tanımda
güncellendiğinde DegiskenAdi
önce tanımlanacak değer adı verilir. Sonra değer atanır
let FullName;
FullName = "Murat Gokduman"
bu tanımlama tek seferde de yapılabilir.
let FullName = "Murat Gökduman";
değer ile yapılacak işlem tanımlamadan önce yapılırsa sistem hata verir.
console.log(Fulname)
let FullName = "Murat Gökduman";
sonuç:
Uncaught ReferenceError: Cannot access 'FullName' before initialization
at 02-degisken-tanimlama.js:5:13
var ile yazsaydık bu hatayo göremezdik.
Standart yazılım mantığında sıralı okuma vardır. Bu nedenle tanımlama değerin kullanılacağı yerden önce alınmalı
let ile yapılan tanımlamadaki değer daha aşağıda değiştirilebilir
let password;
password = 1234
console.log(password)
password = 4321
console.log(password)
Örnek sonuç konsolda: 1234
4321
Daha önce girilen değer değiştirilebildiği gibi, değere ekleme de yapılabilmektedir.
let adres;
sonuç:
adres = "23 nisan mah.";
console.log(adres);
adres = adres + " Köroğlu cad"
console.log(adres);
23 Nisan
23 Nisan Köroğlu cad
aynı işlem için
let adres;
adres = "23 nisan mah.";
console.log(adres);
adres += " Köroğlu cad"
console.log(adres);
değişmemesini istediğimiz bilgiler için kullanılır.
değişken ile değer tek seferde yazılır. Tanımlanan bilgi daha sonra başka bir satırda
değişmez.
const serverPassword = "1234"
console.log(serverPassword)
sonuç:
1234
JS içerisinde sayı verisi değişkene yazılırken değişken türü belirtmeye gerek yoktur.
let x = 5;
işlem önceliği matematikteki gibidir
değeri tanımladıktan sonra aşağıdaki ifadelerin hepsi değeri a kadar arttırır
x = x+a ise 1 arttırır
x += a
x ++
aşağıdaki ifadeler ise a kadar azaltır
x = x - a; ise 1 azaltır
x -= a;
x --;
değer tanımlandıktan sonra
x = x * a; x değerini a katına çıkartır
x *= a;
x = x/a;
x /= a;
x değerini a ya böler
% işareti ile yapılır
x = x % a; değerinde x a ya bölündüğünde kalan değeri alır.
x = x ** a x in a üssünü verir
burada
Math
kütüphanesini kullanacağız.
Math.floor(x.3)
ibareinde değer aşağı yuvarlanır ve sonuç x çıkar.
Math.ceil(x.3)
ibaresinde değer yukarı yuvarlanır ve sonuç x+1 çıkar
Math.round(x.3)
ibaresinde değer yakın değere yuvarlanır. 0.5 i 1 e tamamlar. daha küçük küsüratları
aşağı yuvarlar
" " içine yazılan sayısal değerler metin olarak algılanır.
Daha önce metin olarak
saklanan değer Number() içine yazılarak tekrar sayı özelliği alabilir.
let x = "11";
olarak tanımlandığında 11 metin özelliği kazanır.
let y = Number(x);
yazıldığında ise 11 tekrar sayısal özellik kazanır
true veya false olarak sonuç verir. İçeriğinde değer varsa
true, yoksa false değerini alır.
Aşağıdaki değerler
false olarak değerlendirilir.
0, -0, null, false, Nan, undefied, ("")
Koşul durumlarında ise koşul karşılanıyor ise true karşılanmıyorsa
false değerini alır.
typeof()
console.log(typeof(değişken))
yazdığımızda konsolda veri türü yazar
explicit ve implicit olarak 2 farklı dönüşüm türü vardır. explicit metodlarla yapılan dönüşüm türüdür. implicit ise operatörlerle veya JavaScriptin kendisinin yaptığı dönüşümdür.
parsInt()
let number1 = "12px"
yazımında değişken string (metin) olarak değer alır.
number1 = parseInt(number1)
yazıldığında değişken tam sayı olarak değiştirilir.
Number değişkenin içinde sayı harici bir şey var ise sayıya dönüşümü
gerçekleştiremezken parseInt sayı ile başlayan değişkeni, devamında başka
birşey de yazsa tam sayıya dönüştürebilir. parseFluat değer tam sayı
değilse de dönüşümü gerçekleştirir.
Örnek:
let number1 = "12.2px";
number1 = parseInt(number1)
console.log(number1)
sonuç: 12
let number1 = "12.2px";
number1 = parseFluat(number1)
console.log(number1)
sonuç: 12.2
let number1 = "12.2px";
number1 = Number(number1)
console.log(number1)
sonuç: NaN
let number1 = "12.2";
number1 = Number(number1)
console.log(number1)
sonuç: 12.2
.toString
let number2 = 12;
number2 = number2.toString
veya
let number2 = String(12)
explicit
veya
let number2 = "12"
implicit
veya
let number2 = 12 + ""
implicit
Tüm değerler bu iki yöntemle string olarak yazılabilir
Sembollerde ise sadece explicit yöntem işe yaramaktadır.
BooleanBoolean içi dolu olan veya şartlı ifadeye uyan tüm tanımlarda true verir
Şartlı ifadeye uymayan, boş olan veya yapısı gereği boş algıladığı tüm durumlara [(''),
(0) ,(-0), (NaN), (null), (undefined), (false)] false verir
içinde boş küme belirtenler de dahil herhangi bir sembol varsa true verir
|| ilk bulduğu true değeri döner.
true bulamazsa en son bulduğu false
döner
&& ilk bulduğu false değeri döner
false bulamazsa son bulduğu true
değeri döner
Detaylı örnekler için tıklayınız
Template Literals (önceki adıyla Template Strings), kod okunabilirliği ve yazım kolaylığı sağlayan ES6 ile gelmiş bir string yazma şeklidir.
Yazılacak bilginin backtick içine yazılması gerekmektedir. Bu şekilde birden fazla satıra bilgi yazılabilir.
backtick alt gr + , ile yazılır.
String bilgi doğrudan eklenir. değişkenler ${} içine yazılır.
Örnekleri 02-degisken-tanimlama.js klasöründe. Detaylı açıklama için tıklayınız
.lengthconsole.log(email.length)
console.log(email[0])
console.log(email.charAt(0)) JS de ilk karakter 0 olarak alınır. Kaçıncı karakter
isteniyorsa 0 yerine yazılabilir.
email = email.toUpperCase() tamamı büyük harfe çevrildi ve yazdırıldı.
console.log(email)
email = email.toLowerCase() tamamı küçük harfe çevrildi ve yazdırıldı.
console.log(email)
console.log(email.search("@"))@ işaretinin kaçıncı sırada olduğunu verir.
olmayan bir şey aratırsak değeri -1 olarak verir.
.indexOf ve .search ikisi de arama yapmak için kullanılabilir ancak bazı farkları vardır.
search büyük-küçük harf duyarlılığı olmadan sonuç verir. Bazı özel
karakterlerde sonuç vermemektedir.
indexOf spesifik olarak istenilen karakteri bulur. Büyük-küçük harf duyarlıdır.
Başlangıç noktası seçilebilir. Boş bırakılırsa başlangıçtan itibaren arar
console.log(email.indexOf(".", 5))
5 ten sonraki noktayı bulur
lastIndexOf eşleşen son değeri gösterir
.sliceconsole.log(email.slice(0,10)) 0 dan 10 a kadarı alır
console.log(email.slice(15)) 15 ve sonrasını alır
console.log(email.slice(email.search("@")+1))@ işaretinden sonrasını alır.
console.log(email.slice(email.search("@")+1,(email.indexOf(".")))@ işareti ile
nokta arasındaki kısmı verir.
.replaceDeğişikliğin kalıcı olması için değiştirilen bilgiye ya da yeni bir değişkene set edilmesi
gerekir.
email = email.replace("gmail.com", "renault.com"); çıktı olarak drmuratgokduman@renault.com verir
console.log(email)
.includesistediğim bilgi ilgili değişkende var mı? true veya false verir.
email.includes("@");
çıktı olarak true verir.
.startsWith Bununla bitti mi? .endsWithbir bilginin başında ve sonunda olan bilgilerin doğruluğunu sorgulamak için
kullanılır.true veya false verir.
email.startsWith("drmuratgokduman");
çıktı olarak true verir.
email.endsWith("hotmail.com");
çıktı olarak false verir.
.charAt() değişkendeki parantez içindeki indeks numarasının denk geldiği veriyi
gösterir.
.charCodeAt() değişkendeki parantez içindeki index numarasının denk geldiği verinin
Unicode numarasını gösterir.
.splitMetni belirtilen karakterden bölerek diziye çevirir
let isim = ‘Oguz,Kamer’; Çıktısı: 'Oğuz', 'Kamer'
let isimler = isim.split(’,');
console.log(isimler);
Document Object Model, programların ve komut dosyalarının bir belgenin içeriğine, yapısına ve stiline dinamik olarak erişmesine ve güncellemesine izin veren bir platform ve dilden bağımsız bir arayüzdür.
DOM, mantıksal bir ağaç içeren bir belgeyi temsil eder. Ağacın her dalı bir düğümde biter ve her düğüm nesneler içerir. DOM yöntemleri, ağaca programlı erişime izin verir. Onlarla belgenin yapısını, stilini veya içeriğini değiştirebilirsiniz.
DOM hiyerarşik yerleşimi kullanabildiği gibi ID özelliğini de kullanabilir.
önce eşitleme yapalım
let title = document.getElementById('title')
ID bilgisi title olan elementi title değişkenine bağladık.
title.innerHTML = "Yeni Başlık";
title başlığının inner HTML özelliğine yeni bir tanımlama yaptık.
console.log(title.innerHTML);
Konsolda ve ID bilgisinin HTML yansımasında değişiklik yaptık.
Kaynak koduna bakarsanız aşağıdaki metnin orjinal innerHTML bilgisinin "DOM içerisinden Etiket ve ID ile Öğe Seçimi" olduğunu görebilirsiniz.
document.getElementById('title') kalıbı yerine
document.querySelector('#title') kalıbı da kullanılabilir
document.querySelector("") kalıbı hiyerarşik yapıdan nesne seçmek için de
kullanılır.
let link = document.querySelector("ul#list>li>a")
ile list ID sine sahip ul'nin li>a elementi seçildi
link.innerHTML += " değişti";
ile sonuna "değişti" eklendi
link.style.color = "red";
ile rengi kırmızı yapıldı
link.classList.add("btn");
ile class bilgisine "btn" eklendi.
değişen üstteki satır ile aynı kalan aşağıdaki satır örneği anlamamızı sağlar.
prompt ile kullanıcıdan bilgi almak.
let promptName = prompt("lütfen adınızı yazınız:","buraya yazılacak");
ile bilgi istenir ve promtName değişkenine kaydedilir.
let promptDeneme = document.querySelector("#promptDeneme");
ile değiştirilecek bilgi değişkene atanır.
promptDeneme.innerHTML = `${promptDeneme.innerHTML} ${promptName}`;
istenen bilgi backtick ile düzenlenir. istenilirse style vs. atanabilir.
Gelen bilgi buraya gelecek:
let FirstChild = document.querySelector("ul#list1>li:first-child");
ile listenin ilk ögesi seçilir.
FirstChild.innerHTML = `İlk öge değişti`;
ile değiştirilir. İstenilirse örnekteki gibi span etiketi ve style eklenerek rengi
değiştirilir.
let LastChild = document.querySelector("ul#list1>li:last-child");
ile son öge seçilir ve aynı methot ile değiştirilir.
Önce listeyi tanımlıyoruz.
let ulDOM = document.querySelector("ul#list1");
Sonra eklenecek liste ögesini tanımlıyoruz.
let liDOM = document.createElement("li");
liDOM.innerHTML = "Bunu ben ekledim";
.append ile eklersek nesne en sona ekleniyor.
ulDOM.append(liDOM);
.prepend ile eklersek listenin en başına ögeyi ekliyor.
ulDOM.prepend(liDOM);
let denemeH3 = document.querySelector(".deneme-h3");
ile deneme-h3 klası seçilir.
denemeH3.classList.add("text-primary", "bg-dark", "boş-klass");
ile "text-primary", "bg-dark", "boş-klass" klasları eklenir.
denemeH3.classList.remove("bg-dark", "boş-klass", "olmayan-klass")
ile bg-dark", "boş-klass", "olmayan-klass" klasları kaldırılır.
olmayan bir şeyi kaldırmak istediğimizde hata vermez.
denemeH3.classList.item(0);
sıralamadaki ilk klası çağırır.
denemeH3.classList.contains('warning');
warning klasının varlığını sorgular. çıktı true/false cinsinden
alınır.
denemeH3.classList.toggle("text-primary");
klass varsa siler, yoksa ekler. Tek seferde tek klass için kullanılır.
denemeH3.classList.replace("boş-klass", "yerine-gelen-klass");
bir klası başka bir klas ile değiştirir.
denemeH3.classList.length;
kaç adet klass olduğunu verir.
==iki değerin eşitliğin değerlendirir ve çıktı olarak true/false verir
var a = 10; çıktısı true
var b = "10";
console.log(a==b)
===
var a = 10; çıktısı true
var b = "10";
console.log(a==b)
!= ve !==
console.log(a!=b)
çıktısı false
console.log(a!==b)
çıktısı true
<
console.log(a < b)
çıktısı false
<=
console.log(a <= b)
çıktısı true
>
console.log(a > b)
çıktısı false
<=
console.log(a >= b)
çıktısı true
&&birbirine bağladığı her karşılaştırma true ise true verir.
||birbirine bağladığı değerlerden biri true ise true verir.
!dahil olduğu ifadenin değerini tersine çevirir
if / elseeğer kullanıcı bilgisi varsa konsola yazdır.
if(userName.leight > 0){console.log(userName)};
if içindeki yapı true ise süslü parantezdeki fonksiyon çalışır. yapı false ise hiçbir şey
olmaz.
if içindeki koşul herhangi bir değer olduğunda true vereceğinden parantez içine
userName.leight yerine userName yazılabilir.
eğer kullanıcı adı varsa konsola yazdır. şart saplanmıyorsa konsola "kullanıcı adı yok" yazdır.
if(userName.leight > 0){console.log(userName)} if içindeki yapı true ise süslü parantezdeki fonksiyon çalışır. yapı false ise else içindeki
fonksiyon çalışır.
else{conslole.log("kullanıcı adı yok")};
Ehiyet alabilir miyim? = Örnek propt ile yapıldığından js dosyasından kapatıldı.
if/else ile çoklu koşul
let userName = prompt("Lütfen adınızı giriniz") ile tanımlar yapılır.
let age = prompt("lütfen yaşınızı giriniz")
let infoEhliyet = document.querySelector("#Ehliyet")
if (userName && age >= 18){ ile koşul belirtilir.
infoEhliyet.innerHTML = "ehliyet alabilir"
} else if (!userName){
infoEhliyet.innerHTML = "kullanıcı adı girilmedi"
} else if (userName && !(age >= 18)){
infoEhliyet.innerHTML = "Yaşın tutmuyor"
}
switch ile çoklu koşulmantıksal ifadelerde çalışmıyor. String veri tipi eşitlik durumlarında sonuç veriyor
let hava = "Gunesli";
ile değişken atanır.
switch(hava) { ile ilk case atanır.
case "Yagmurlu":
console.log("Semsiyeni yanina almayi unutma");
ile çıktısı alınır.
break;
ile bir sonraki case e geçilir.
case "Bulutlu": ile diğer değerlere uymayan durumlar için sonuç alır
console.log("Disari cik");
break;
case "Karlı":
console.log("Kalin giyin");
break;
case "Firtinali":
console.log("Bir süre disari cikma");
break;
default:
console.log("Bilinmeyen hava durumu:" , hava);
}
let userName = prompt("Lütfen adınızı giriniz") ile tanımlar yapılır.
let age = prompt("lütfen yaşınızı giriniz")
let infoEhliyet = document.querySelector("#Ehliyet")
infoEhliyet.innerHTML = (userName && age >= 18 ? "ehliyet alabilir" : "ehliyet alamaz");
? öncesine koşul yazılır. ? sonrası ilk kısım mantıksal ifade true ise ikinci kısım false
ise aktifleşir
Buraya not bilgisi gelecek. Bilgi prompt ile alındığından, fonksiyon JS içinden kapatıldı
Fonksiyonlar adından anlaşılacağı gibi belli bir amacı gerçekleştirmek için oluşturulmuş yapılardır.
Fonksiyonu oluşturmak çalışması için yeterli değildir. Fonksiyonu adıyla çağırmak gerekir.
myFunction() fonksiyon adının yanına muhakkak () konulur. () içine varsa parametre
konulur yoksa boş bırakılır.
function ibaresinden sonra fonksiyon adı yazılır. Bir fonksiyonu adı varsa bunlara
Normal-Adlandırılmış Fonksiyonlar (Regular/Named Functions) deriz.
Önemli olan kodun okunabilirliği açısından fonksiyonu işlevine uygun bir biçimde adlandırmaktır,
dahası bu bir işlevi belirttiği için fonksiyon adımız bir eylem olmalıdır. Bunun için bazı ön
ekler kullanabiliriz.
Örneğin değer almak istediğimiz bir fonksiyon adında ön ek olarak get
kullanabiliriz.
Bununla birlikte şunu da unutmamalıyız istendiğinde adı olmayan anonim bir fonksiyon da
kullanılabilir. Aşağıda bu fonksiyon türünden bahsediliyor
function fonksiyonAdi (parametreler){işlev}
kendine ait bir adı yoktur. Bir değişkene tanımlanır.
let degiskenAdi = function(parametre){işlev}
returnBazen fonksiyonun geriye göndereceği değeri ekrana çıktı vermek yerine bir değişken ya da başka bir fonksiyonda daha sonra kullanmamız gerekebilir. Bu gibi durumlarda fonksiyon gövdesinde return ifadesini kullanırız.
Fonksiyonun içinde belirtilen değişkenler lokal değişken adını alır ve sadece o fonksiyonda çalışır.
Fonksiyonun dışında belirtilen değişkenler global değişken adını alır ve tüm sayfada çalışır.
JavaScript asenkron yapıdaki bir programlama dilidir. Senkron dediğimiz kavram şunu ifade etmektedir: kodumuz yukarıdan aşağı doğru sırayla işlenir ve bir satırdaki işlem bitmeden bir sonraki satıra geçilmez. Asenkron yapıda ise fonksiyonların birbirlerini beklemelerine gerek yoktur.
function topla(sayi1, sayi2) {
return sayi1 + sayi2;
}; 30 döner
var sonuc = topla(10,20);
function carp(sayi1, sayi2) {
sayi1 * sayi2;
}; return olmadığı için undefined döner
result=carp(10,20);
const carpim = (sayi1, sayi2) => sayi1 * sayi2;
ile aşağıdaki fonksiyon aynı anlama gelir
const carpim = function(sayi1, sayi2){
return sayi1*sayi2; }
const helloWorld = () => console.log('Hello World');
=
const helloWorld = function(){
console.log('Hello World')}
let experience = prompt('Kac yillik gelistirici tecrubeniz var', 4);
=
const developer =
experience > 5
? () => alert('Bir cok konuyu biliyorum')
: () => alert('Hicbir sey bilmiyorum:)');
developer();
if(experience > 5){
allert('Bir cok konuyu biliyorum')
} else {
alert('Hicbir sey bilmiyorum:)');
}
Kısaca bir fonksiyon kendisini tekrar çağırıyor ise biz buna recursion diyoruz.
Örnek: a,b değerleri a üssü b: recursion olmadan
function pow(a,b){
let result = 1
for(i = 0, i < b, i++ ){
result *= a; }
return result;
}
resursion ile:
function pow(a,b){
if(b==1){
return a;
}else{
return a*pow(a,b-1);
}}
Detay okuma için tıklayınız
Parametre, fonksiyonun çağırıldığı durumlarda, içindeki değişkene değer atanabilmesini sağlar
default parametre fonkisyon çağırılırken parametre atanmaması durumunda atanacak
parametreyi belirtir. Atanması şart değildir.
function myFunction(parametre = "defaultParametre")
Tıkla ve değişsin
bir fonksiyonun işlem sonunda javascript içinde bir sonuç vermesi için return
kullanılır
=> ile fonksiyon yazmakversiyon 1
const fonksiyonAdiV1 = (parametre) => {fonksiyonun islevi}
versiyon 2
const fonksiyonAdiV2 = parametre => fonksiyonun islevi
bu yazım tek parametre ve tek işlem varsa işler
birden fazla parametre var ise parametreler () içine alınmalı. birden fazla işlem varsa işlemler
{} içine alınmalı
this içinde yer aldığı nesneyi temsil eder. nesne içinde fonksiyonda this kullanıldığıda geleneksel fonksiyonda nesneyi, fat arrowda globali refere eder
event listesi için tıklayınız ya da tıklayınız
event js nin html kodunu dinleyip, burada yapılan işleme göre fonksiyon tetikleme işlemidir. 3 farklı yoldan event eklenebilir.
js içinde:
element.addEventListener(event, function);
örnek: id bilgisi buton olan etikete tıklandığıda aktif olan fonksiyon atandı
const buton = document.querySelector("#buton"); id si buton olan element seçildi
buton.addEventListener('click' , function() click eventi ile tetiklenen fonksiyon
eklendi.
{
alert("Buton Tıklandı");
})
js içinde: fonksiyon adı event içine yazılıp fonksiyon ayrı yazılabilir.
element.addEventListener(event, functionName);
yukarıdaki örneğin aynısı:
const buton = document.querySelector("#buton"); id si buton olan element seçildi
buton.addEventListener('click' , functionName) click eventi ile tetiklenen
fonksiyon adı eklendi.
function functionName()
{
alert("Buton Tıklandı");
})
element.event = function(){fonksiyon içeriği};
Mouse tıklaması ile gerçekleşen etkinliktir.
dblclick çift tıklama
click tıklama
vs
Klavyeden herhangi bir tuşa tıklanması sonucu gerçekleşen etkinliklerdir.
İç içe elementlerde ,örneğin üzerine tıklanan bir eleman kendisini kapsayan elemanı da yazar. Adeta bir sabun köpürmesi mantığıyla dıştaki hedef elemente kadar ilerler.
Bu örnek yukarıdaki form ile yapılmıştır. Tıklanan ögenin neyin içinde olduğunu verir
örnek konsolda.
İç içe elementlerde, Örneğin üzerine tıklanan bir eleman kendisinin içindeki elemanı da yazar. Kabarcıklanma etkinliğinin tam tersi şeklinde çalışır. Hedef dıştan içe doğrudur. Bir önceki örnekteki çıktının tam tersi olarak ; ekran çıktısı çerçeve form seklindedir.
Kullanım şekli:
element.addEventListener(event, function, useCapture);
useCapture parametresi "True" ve "False" değerleri almaktadır. Diğer tüm kullanımı
kabarcıklanma etkinliği ile aynıdır.
event.stopPropagation()Bir etkinliğin özelliğini durdurmak için kullanılır. Bir fonksiyon parametresi olarak girilen
"event" e bu etkinlik atanarak kullanılır.
Kullanımı:
event.stopPropagation();
event.preventDefault()Bir HTML elementinin varsayılan eylemini tamamen engellemek için bu eylem kullanılır. Bir fonksiyon parametresi olarak girilen "event" e bu etkinlik atanarak kullanılır.
localStorage ile Veri Eklemek, Düzenlemek ve SilmeHTML 5 ile birlikte web sayfaları veriyi yerel (local) veya tarayıcı (browser) içinde
saklayabilir hale gelmiştir. Bu sayede eskiden cookie’ler ile yaptığımız işlemler daha güvenli
ve daha hızlı şekilde yapılabilir hale gelmiştir.
Veriler key/value şeklinde saklanmaktadır ve web sayfaları sadece kendi oluşturdukları verilere
erişebilmektedir.
HTML 5 ile tarayıcılar iki tane yerel kayıt türünü desteklemektedir.
localStorage kayıtları zaman aşımı olmaksızın tutarken sessionStorage kayıtları oturum sonlanana kadar ya da veri kaybolana kadar tutmaktadır. Ancak LocalStorage ve SessionStorage kullanıcı tarafından kolayca okunabilir ve değiştirilebilir, bu sebeple uygulama içerisindeki güvenlik ile ilgili verilerin depolanmaması gerekmektedir. LocalStorage ve SessionStorage sayfalar arasındaki ve client işlemleri arasındaki hassas olmayan verilerin taşınmasında tercih edilmektedir.
window.localStorage.setItem("key", "value");
ilki ‘key’ yani anahtar adı ikincisi ise ‘value’ yani o anahtara karşılık gelen değeri
ifade etmektedir.
Eğer daha önce belirttiğiniz bir anahtarı kullanırsanız kaydetmek için veri eski kaydın üzerine yazılacaktır.
Verileri kaydederken sadece string biçiminde kayıt yapıldığını bilmemiz gerekmektedir. Karmaşık bir veriyi kaydetmek istediğinizde toString() metodu çalıştırılmalı ve üretilen değer kaydedilmelidir. Json verisini kaydetmek içinse JSON.stringify() metodu kullanılmalıdır.
window.localStorage.getItem("key");
Eğer veri daha önce kaydedilmeyen bir veriyi okumaya çalıştığımızda null değeri geri
dönmektedir.
localStorage.removeItem("key");
sadece verilen anahtarı ve değerini siler.
localStorage.clear();
tüm verileri siler
__ 100 __
localStorage İçine Farklı Türde Veriler EklemekLocal Storage içine aldığı yapıları string olarak kaydeder. Kompleks olmayan yapılar geri alınırken istenilen dosya türüne dönüştürülebilir.
kompleks veriler için JSON.stringify() ile kod önce stringe çevirilir daha sonra
JSON.parse() ile veri tekrar eski haline getirilir.
localStorage.setItem("sayaç", JSON.stringify(userInfo))
JSON.parse(localStorage.getItem("sayaç"))
Form içinde bulundurduğu form elementlerinin name'leri sayesinde değerlerini alıp bu değerlerle işlem yapmanıza olanak sağlayan bir yapıdır.
Genellikle backend'e istek yapılacağı zaman kullanılır.(Veri göndermek gibi)
En önemli parametresi method parametresidir. Method, "post" veya "get" olmak üzere iki türlü değer alabilir.
GET Methodu: Form verilerini URL üzerinden gönderir. Get metodu önemsiz verilerde kullanılmalıdır, kullanıcı adı, şifre gibi bilgilerin bu method ile gönderilmesi uygun değildir.
input type="text"klasik textbox kullanımı
input type="password"Şifre tipinde veri girişi için kullanılır. Textbox’a girilen ifadeler “*” şeklinde gizlenerek gösterilir.
input type="radio"Radio button tipinde, istenilen verileri seçmek için geliştirilen giriş yöntemidir.
beni seç
beni seç
input type="checkbox"Checkbox tipinde, onay gerektiren durumlarda kullanılması için geliştirilen giriş yöntemidir.
Beni seç ya da vazgeç
Beni seç ya da vazgeç
input type="button"Klasik buton oluşturur. Varsayılan olarak herhangi bir işlem yapmaz. JavaScript vb. programlama dilleri ile birlikte işlevsel hale gelir.
input type="submit"Form içerisindeki elementlere girilen verileri, gönderme işlemini yapar. action ile açılacak yeni sayfaya veya mevcut sayfanın kendisine, get veya post metoduna göre değişecek şekilde veri gönderme işlevini gerçekleştirir. methot="get" kullanılmışsa action durumunda göre sayfanın adres çubuğundaki url’in sonunda, methot="post" kullanılmışsa sayfanın arka planında veriler saklanır.
input type="reset"Buton tipinde bir nesne oluşturur. Form içerisindeki elementlere veriler girilmiş halde iken reset’e tıklandığında görünen tüm verileri temizler ve elementleri ilk haline getirir.
input type="color"Renk çeşitlerini tasarımcıya sunan ve seçimini sağlayan giriş tipidir.
input type="date"Tarayıcıda tarih gösterimini sağlayan tiptir. gg.aa.yyyy varsayılan formatında görünür.
input type="email"Sadece e-mail girişi yapabilmek için kullanılır. E-mail formatı dışındaki girişlerde, düzgün veri girişi yapılması gerektiği yönünde uyarı vermektedir. Safari dışındaki tüm tarayıcılar desteklemektedir.
input type="number"Sadece sayı girişi yapabilmek için kullanılır. Sayı dışındaki girişlerde, düzgün veri girişi yapılması gerektiği yönünde uyarı vermektedir. Safari dışındaki tüm tarayıcılar desteklemektedir.
input type="range"Bir aralık belirtmemiz gerektiğinde, bu giriş tipini kullanmamız gerekmektedir. Dizi şeklinde veri gösterimi yapar. min="başlangıç değer" ve max="son değer" ile aralık belirlemesi yapılır. Tüm tarayıcılar tarafından desteklenmektedir.
input type="search"Arama yapmamızı sağlayan giriş tipidir. Aktif olacak form içerisinde, girilecek olan veri aranır. Sadece Google Chrome ve Safari tarafından desteklenmektedir.
input type="time"Tarayıcıda saat gösterimini sağlayan tiptir. hh.mm varsayılan formatında görünür. Element üzerinde saat belirlemesi yapılması mümkündür. İnternet Explorer ve Mozilla Firefox dışındaki tarayıcılar tarafından desteklenmektedir.
onSubmit ve onChange EventlerionSubmit Form submit olduğu anda ne yapacağını söyleyeceğimiz event'tir.
onChange Form'un içindeki form elementlerinin(input) value'su her değiştiğinde bu değişen value'yu bizim her defasında elde etmemize olanak sağlayan eventtir.
actionFormunuzu submit ettikten sonra nasıl bir aksiyon alacağını belirlersiniz. Genellikle formlarda gönderi işlemi tamamlandıktan sonra form datası server'a gönderilir. Fakat server haricinde kendimiz bu form datasını başka bir dosyaya atayabiliriz. Örneğimizde görüleceği gibi dosyamız "script.js" adlı bir dosyaya gönderiliyor. Form datasının yönetimi bundan sonra bu dosya üzerinden yürütülür.
form action="/script.js"
methodForm datanızın hangi methodla gönderileceğine karar verir. "Get" veya "Post" request olarak. Bu özellik verilmemesi durumunda default olarak "Get" methodu formunuza atanır.
form action="/script.js" method="get"
form action="/script.js" method="post"
autocompleteIngilizce isminden de anlaşılacağı üzere formunuzda otomatik tamamlama özelliğini açıp veya kapatmak için işinize yarar. Bu özelliği açmak daha önceki entry'lerinize göre formun tamamlama yapmasını sağlayacaktır.
form action="/script.js" autocomplete="on"
novalidateAktif olduğu sürece gönderdiğiniz form datanızın otomatik olarak doğrulanmamasını söyler.
form action="/my_script.js" novalidate
fnameGörünecek olan yazıyı belirler. Bu yazı, adete bir html etiketi gibi görünür.
typeBu kısımda formunuzun text/numerik bir form olacağına karar verirsiniz.
nameInput'unuzun name özelliğini belirlersiniz. Genelde isimlendirme küçük harf verilir backend kısmına uygun olması için
valueInput'taki aktif görünecek olan yazı için verilir. Örnek olarak butonların üzerindeki yazı gibi düşünebiliriz.
input içerisinden Değer Almakinput etiketinde name bilgisi olmak zorunda.
FORM VE FORM SUBMİT YÖNETİMİ konusundaki örnek 1 alınmışır ve ekleme yapılmıştır.
let formDOM = document.querySelector("#userForm") buraya kadarı önceki açıklamada
formDOM.addEventListener("submit", formSubmit)
function formSubmit(event){
event.preventDefault()
let infoScoreDOM = document.querySelector("#score") input DOM seçildi.
console.log(infoScoreDOM.value) input DOM value konsola yazdırıldı
localStorage.setItem("score", infoScoreDOM.value) input DOM value lokal depoya
kaydedildi.
}
array(dizi) tanımı birden çok value(değer) saklamamızı sağlar. Bu diziler içinde string, number, boolean, object, tipinde veriler saklanabilir. Diziler de object(nesne) tipindedir.
let diziAdi = ["istenilen", "değerler"]
diğer değişkenlerde olduğu gibi, dizi let ile tanımlanırsa içeriği daha sonra değiştirilebilir. const ile tanımlanırsaa değiştirilemez.
ilk elemanın index değeri 0'dır
diziAdi[0]
ile ilk değere ulaşılır.
dizi uzunluğu için diziAdi.length ifadesi kullanılır.
Son elemana ulaşmak için:
diziAdi[diziAdi.length - 1]
kullanılır.
Bir dizi içinde başka bir dizi varsa ve onun elemanına ulaşmak gerekiyorsa önce iç dizinin ana dizideki yeri sonra da iç dizide istenen elemanın yeri yazılır.
örnek dizi: let ornekDizi = [1, 2, ["aslı", "kerem"], 4, 5]
Bu dizide "aslı" değerine ulaşmak için:
ornekDıze[2][0]
yazılır.
.forEach fonksiyonudizideki her bir değere işlem yapmak için kullanılır.
diziAdi.forEach((item, index) => { ile her item index bilgisi ile konsola yazıldı.
console.log(item, index);
});
typeof(diziAdi)
sorgulanan veri dizi ise object çıktısı verir.
Array.isArray(diziAdi)
sorgulanan veri dizi ise true verir.
push() Metoduvar olan dizinin sonuna eleman ekler
diziAdi.push("eklenecek öge")
unshift() Metoduvar olan dizinin başına eleman ekler
diziAdi.unshift("eklenecek öge")
pop() Metodudizinin son elemanını siler
diziAdi.pop("eklenecek öge")
shift() Metodudizinin ilk elemanını siler
diziAdi.pop("eklenecek öge")
splice() MetoduMetodun ilk parametresi işlemin yapılacağı index numarasını, ikinci parametre ise kaç elemanın silineceğini belirtir.
ilk iki parametreden sonra yazılan tüm parametreleri ilk parametrede atıfta bulınılan yere ekler. Kendisinden sonra gelenleri kaydırır.
splice() ile silinen kısım başka bir değişkene dizi olarak eklenebilir.
örnek dizi: let ornekDizi = [1, 2, 3, 4, 5]
let ayrılanDizi = ornekDizi.splice(3, 1, "dört", "dört buçuk") 1, 2, 3, "dört", dört buçuk", 5
console.log(ornekDizi)
cosole.log(ayrılanDizi)
4
öge eklemek ile aynı yöntemle (unshift ve push ile) array içine array eklenebilir
.splice()parantez içine ögenin konumu ve virgülden sonra kaç veri taşınacağı yazılır.
let diziAdi = [1, 2, 3, 4, 5, 6] [1, 2, 6]
let yeniDizi = diziAdi.splice(2, 3)
console.log(diziAdi)
console.log(yeniDizi)
[3, 4, 5]
.includes() parantez içine aranacak değer yazılır.
diziAdi.includes("arananDeger") Boolean (true/false) olarak çıktı alınır.
.indexOf parantez içine aranacak değer yazılır.
let diziAdi = [1, 2, 3, 4, 5, 6] 2 değerini verir.
diziAdi.indexOf(3)
olmayan bir değer arandığında -1 verir.
Daha önce oluşturduğumuz array yapısını doğrudan let kopyaDizi = diziAdi olarak başka bir değişkene atadığımızda ve yeni array üzerinde değişiklik yaptığımızda eski array de birebir bu değişiklikten etkileniyor. Bu JS in verileri saklarken tasarrufa giden yapısından kaynaklanıyor.
Orjinalin kopyadan etkilenmemesi için:
.slice() Parantez içerisine ise kopyalamak istediğimiz elemanların aralığını başlangıç ve bitiş indeksleri olacak şekilde iki parametre olarak giriyoruz. Bitiş indeksindeki değer aralığa dahil değildir.
Bu metot uygulandığı dizinin orijinal halini değiştirmiyor bu yüzden yeni oluşacak diziyi farklı bir değişkende saklıyoruz.
parantez boş burakılırsa arrayı olduğu gibi kopyalar.
let kopyaDizi = diziAdi.slice()
olarak tanımlama yapılır.
= [...diziAdi]es6 ile birlikte aşağıdaki yöntem de kullanılabilir.
let kopyaDizi = [...diziAdi] veya
veya
let [...kopyaDizi] = diziAdi
Array içindeki değerleri değişkenlere atamak için klasik yöntem:
let degiskenAdi1 = arrayAdi[0]
şeklinde tek tek yazılır.
ES6 ile birlikte birden fazla değeri değişkene atamak için:
let [degisken1, degisken2, degisken3, ...kalanArray]
ile ilk 3 değer değişken adlarına atndı. kalan değerler için kalanArray adında yeni bir array yaratıldı.
.concat()parantez içine sona değerleri eklenecek olan array girilir.
let birlesenDizi = diziAdi1.concat(diziAdi2)
let birlesenDizi = [...diziAdi1, ...diziAdi2]
let birlesenDizi = [...diziAdi1, ...diziAdi2]
birleştirme işlemi sırasında array olmayan veriler de yeni oluşaka arraye eklenebilir:
let birlesenDizi = [...diziAdi1, ...diziAdi2, "yeni eleman"]
diziAdi.toString()
değerleri aralarına "," koyarak stringe çevirir.
diziAdi.join()
değerlerin arasına konulmasını istediğimiz şeyi parantez içine yazabiliriz. Hiçbirşey yazmazsak "," ile ayırır.
.somedizi içinde bir koşulu sağlayan değer olma durumunu gösterir. Bir koşula true verirse durur ve çıktı olarak true verir. Bütün seride false verirse çıktı olarak false verir.
const sayilar = [4,5,6]; beşten büyük değer dizide olduğundan çıktı olarak true verir.
const sonuc1 = sayilar.some(function(sayi) {
return sayi > 5 ;
});
const sayilar = [4,5,6]; sekizden büyük değer dizide olmadığından çıktı olarak false verir.
const sonuc1 = sayilar.some(function(sayi) {
return sayi > 8 ;
});
.every().some gibi çalışır. tüm dize için koşul doğru ise true verir. biri için bile uymuyorsa fonksiyon durur ve false verir.
.find()Bu metot belirtilen koşula uyum sağlayan dizi elemanını bulmamızı sağlar Diğer metotların aksine find metodu elemanın kendisini döner. Koşulu sağlayan birden fazla eleman varsa, bulduğu ilk elemanı döner.Koşulu sağlayan bir eleman bulamazsa undefined döner.
Örnek:
const array1 = [5, 12, 8, 130, 44]; expected output: 12
const found = array1.find(element => element > 10);
console.log(found);
ileri okuma için developer.mozilla.org -> Array/find
.sort()Bu metot, dizi içerisindeki elemanları sıralamaya yarar. Orijinal dizi sıralanmış şekilde döner. (Yani dizi mutate eder.) Eğer parametre olarak bir fonksiyon verilmezse dizi elemanları string'e çevrilir ve UTF-16 değerlerine göre sıralanır. Artan veya azalan olarak sıralamak için farklı bir yol izlenmelidir.
const sayilar = [3,5,2,10,4]; // Çıktı olarak [10, 5, 4, 3, 2] alırız.
sayilar.sort(function(a,b) {
return b-a;
büyükten küçüğe sıralar. tersi için a-b yazılmalı
});
console.log(sayilar);
ileri okuma için w3schools - js.array_sort
.reduce()Bu metot dizimizi yalnızca bir değere indirger. Parantez içerisine parametre olarak bir fonksiyon ve accumulator'ün (toplayıcının) başlangıç değeri girilir. Bu metot orijinal diziyi değiştirmez. (Mutate etmez.)
ben bunu anlamadım ama örnek kopyalanabilir :)
const sayilar = [10,20,30];
// Dizi içindeki sayıları toplayarak indirgeyecek bir fonksiyon yazalım:
function indirgeyici (akumulator, sayi) {
return akumulator + sayi;
}
// Bu fonksiyonu ve toplamaya 0'dan başlayacağımızı belirten 0 sayısını metodumuza parametre olarak girelim ve sonucu bir değişkende tutalım:
const sonuc1 = sayilar.reduce(indirgeyici,0);
console.log(sonuc1);
0 + 10 + 20 + 30 = 60 olacağından çıktı olarak 60 bekleriz.
Eğer akümülatorümüzü 0 yerine 5'den başlatsaydık çıkabilecek sonucu görelim:
const sonuc2 = sayilar.reduce(indirgeyici, 5);
console.log(sonuc2);
// 5 + 10 + 20 + 30 = 65 olacağından çıktı olarak 65 bekleriz.
Bir for döngüsü, belirtilen koşul doğru olduğu sürece komutların çalıştırılmasını sağlar. Koşul sağlanmazsa döngü çalışmayı durdurur.
for(başlangıç ataması; koşul; döngü sonunda çalışacak ifade){koşul doğru ise çalışacak fonksiyon}
örnek:
for(var i=10; i>=0; i--) (atanan değer i = 10; i 0 dan büyük veya eşitse fonksiyon çalışır; her döngünün sonunda i bir eksilir) { ilk değerden başlayarak koşul sağlandığı sürece bütün "i" değerleri konsola yazdırılır.
console.log(i)
} çıktı: 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
break ve contiune KullanımıBreak: burada dur
Continue: bunu atla
break ifadesi içinde bulunduğu döngüyü sonlandırmak için kullanılır. Dış döngü varsa işlemeye devam eder.
Devamına etiketini aldığı döngüyü sonlandırır.
Örnek:
cikis_etiketi: for (var i = 0; i <= 5; i++) { iç döngü 9'a eşitlendiğinde dış döngü durur. break etiket olmadan yazılsaydı, iç döngü 9'a geldiğinde durur ve bunu dış döngü kadar (5 kez) tekrarlardı.
for (var j = 0; j <= 50; j++) {
if (j == 9) {
break cikis_etiketi;
}
console.log("iç döngüden j :" + j);
}
}
İçinde bulunduğu döngüde kendisine tanımlanan şarta denk geldiğinde işlem yapmayıp sonraki ifadeden devam edilmesini sağlar.
Devamına etiketini aldığı döngüye etki eder.
while DöngüsüWhile döngüsü parametre olarak verilen koşul devam ettiği sürece çalışır.
while(koşul){yapılacak işlem;}
Örnek:
var degisken = 1;
ile değişken tanımlanır.
while(degisken <= 10){
ile koşul belirtilir.
console.log("değişkenin değeri: " + degisken); ile yapılacak işlem tanımlanır.
degisken ++ ;
}
çıktı 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
degisken'in değeri ilem sonunda 11 olur.
forEach ile Array içerisindeki Öğelerin ÇağrılmasıListedeki her bir ögeye tek tek işlem yapar ve ayrı ayrı çıktı verir. Listenin kendisini değiştirmez (fonksiyon içinde arrayi etkileyen bir kod eklenmediyse -aşağıda örneği var-).
diziAdi.forEach(function(value, index, array){"istenilen fonksiyon"})
fonksiyon içindeki ilk parametre dizideki değeri, ikinci parametre değerin indeksini verir. üçüncü bir parametre atanırsa o da arrayin kendisini döndürür.
Örnek: Array'in kendisini değiştirmek:
PRODUCTS.forEach((product, index, array) => {array[index] = product + "111"})
PRODUCTS arrayi içindeki her bir maddeye 111 verisi eklenir.
Örnek: Array'de yapılan değişikliği başka bir array'e kaydetmek:
const number = [4, 11, 9]; ile arrayler tanımlanır.
const newArray = [];
number.forEach(x => newArray.push(x*3))
ile newArray e değerler 3 katı olarak eklenir.
.filter ile Array İçerisinde Sadece İstenilen Bilgilerin Yeni Listeye Eklenmesifilter metodu bir dizi içerisindeki belirli bir koşulu sağlayan elemanlar ile yeni bir dizi oluşturmamıza dolayısıyla dizi elemanlarını filtrelememize yarıyor.
Yeni oluşacak diziyi bir değişkende saklıyoruz. Orijinal dizi bozulmuyor.
örnek:
const sayilar = [1,2,3,4,5];
// Orijinal diziyi 3'ten büyük olan sayılar için filtrelediğimizde yeni oluşacak dizi [4,5] olacaktır.
const filtrelenmisSayilar = sayilar.filter(function(sayi) {
return sayi >3;
});
console.log(filtrelenmisSayilar);
console.log(sayilar);
// Orijinal dizi bozulmayacağından çıktıda [1,2,3,4,5] olarak görürüz.
Örnek 2:
const users = [ ile ilk array tanımlanır.
{fullName: "Mehmet Veli", isActive: false},
{fullName: "Ali Duran", isActive: true},
{fullName: "Ahmet Yılmaz", isActive: true},
{fullName: "Oğuz Şahin", isActive: false},
]
içinden isActive bilgisi true olanları almak için:
const activeUsers = users.filter(user => user.isActive)
içinden isActive bilgisi false olanları almak için:
const pasiveUsers = users.filter(user => user.isActive === false)
.map ile Array İçerisideki Yapının Değiştirilerek Yeni Liste OluşturulmasıforEach ile yeni liste elde edemezken map ile yeni bir liste elde edebiliriz.
Map metodu da forEach gibi kendisine verilen fonksiyonu dizinin her elemanı için uygular fakat forEach'ten farklı olarak sonucu yeni bir dizide tutar. Orijinal dizi olduğu gibi kalır.
let degisenDizi = diziAdi.map(function(değer){"istenilen fonksiyon"})
fonksiyondan return ile sonuç alınır. sonuçlar yeni diziye kaydedilir.
array.map( function(value, index, array), this){return "istenilen işlem"}
array: Üzerinde işlem yapılacak olan diziyi belirtir. Bu dizinin her bir elemanı map metotunun içinde belirleyeceğimiz işleme tabi tutulacaktır.
value: Üzerinde işlem yapılan dizi değerini belirtir.
array: Üzerinde işlem yapılan diziye erişimi sağlar
this: Kullanımı zorunlu değildir(opsiyoneldir). this değişkenine iletilecek olan değeri belirtir.
Örnek: Bir dizinin tüm elemanlarını 2 ile çarpan fonksiyon
const sayilar = [2, 3, 4, 5, 10] tek işlem varsa return kullanmadan da yazılabilir.
const yeniArray = sayilar.map(deger => {
return deger * 2
})
const yeniArray = sayilar.map(deger => deger * 2)
Örnek: array den obje oluşturma:
const USERS = ["AYSE", "MehMet", "TugCE", "“AkSEL"]
const USERS_OBJ = USERS.map(item => { returndan sonraki köşeli parantez oluşturduğumuz şeyin obje olduğunu belirtiyor.
return{userName: item, shortName: `${item[0]}.`, newName: `${item[0].toUpperCase()}${item.slice(1).toLowerCase()}`}
})
normalde tek bir işlem yapılacaksa süslü paranteze ve return almaya gerek olmaz ancak objeler de köşeli parantez içinde olduğundan, süslü parantez ve return kodun karışmasını engeller.
Obje oluşturma tek işlem ise süslü parantez ve return yerine obşe normal paranteze alınabilir.
const USERS = ["AYSE", "MehMet", "TugCE", "“AkSEL"]
const USERS_OBJ = USERS.map(item => (
{userName: item, shortName: `${item[0]}.`, newName: `${item[0].toUpperCase()}${item.slice(1).toLowerCase()}`}
))
Objeler, içerisinde birden fazla değeri depolayan yapılardır. Property olarak bilinen bu değerler primitive(String,number, boolean vb.) veya başka objeler olabilirler ve her bir değer string veya sembol ile isimlendirilebilir.
Objeler değiştirilebilen veri tiplerindendir. İçerdiği propertyler, objenin kendisi const keyword ile atanmış olsa bile değiştirilebilirler. Fakat primitive değerlerden farklı olarak objeler, referans yoluyla değiştirilirler ve değişen obje, yeni bir hafıza adresine sahip olur. Çünkü primitive değerlerin aksine objeler, JavaScript istemcisinin belleğinde, sahip oldukları değerlerle değil, sistemin atadığı hafıza adresleriyle kayıtlıdırlar. Bunun ayrımını aşağıdaki örnekte şöyle görebiliriz.
aynı değerlere sahip 2 primitive veri tipi:
let mesaj = "merhaba"; çıktı: true
let başkaBirMesaj = "merhaba";
console.log(mesaj == başkaBirMesaj);
aynı değerlere, farklı memory adresslere sahip 2 obje:
let obje = { çıktı: false
mesaj:"merhaba"
}
let başkaBirObje = {
mesaj:"merhaba"
}
console.log(obje == başkaBirObje);
Bu örnekte görüldüğü gibi, aynı primitive değerlere sahip olan “mesaj” ve “başkaBirMesaj” isimli değişkenler eşit kabul ediliyor. Fakat “obje” ve “başkaBirObje” isimli objeler de bire bir aynı değerleri barındırmalarına rağmen eşit kabul edilmiyorlar. Çünkü bu iki obje, arka planda göremediğimiz iki ayrı hafıza adresiyle tanınıyorlar, bu yüzden içerikleri aynı olsa da farklı kabul ediliyorlar.
Objeler üç şekilde oluşturulabilir. Object literal, new Object keyword’ü ve Object.create() fonksiyonuyla.
Object literal ve new Object yöntemleri, normal bir objeyi oluştururken kullanılan yöntemlerdir.
Object.create() yöntemi ise, mevcut bir objeden kalıtım yoluyla bazı bilgiler alarak yeni bir obje oluşturmaya yarar.
{} kullanılarak değişkene tanımlanır. key-value çiftleri "," ile ayrılır.
let newObject = {
key1: value1,
key2: value2
}
let newObject = new Object()
newObject.key1 = value1;
newObject.key2 = value2;
Object.create ile Obje OluşturmakBaşka bir objeden katılım alarak obje oluşturmak için kullanılır
let newObject = Object.create(null);
hiçbir katılım almaz.
let newObject = Object.create(Object.prototype);
object literal ve new object keyword ile oluşturulan objelerin prototiplerini parametre olarak aldığı için, onlar gibi çalışır.
let newObject = Object.create(oldObject);
daha önce tanımlanan oldObject objesindeki değerleri alır. Bir nevi objeyi kopyalar.
delete(newObject.keyName)
key string veri tipinde olmalı. value herhangi bir veri tipinde olabilir.
bir value'ya ulaşılmak istendiğinde:
objectName.keyName
veya
objectName["keyName"]
bu yazımda keyName birden fazla kelime içerebilir veya karakter dışında bir değerle başlayabilir. Bunu yapabilmek için de tanımlarken "" içine yazılır.
fonksiyonla obje oluştururken key değerini değişken olarak belirlemek için fonksiyon içinde [] içine yazılır.
function objeYapma(x, y){ fonksiyonu tanımlandığında:
return{
[x]: y
}
}
objeYapma("name", "murat")
cikti olarak:
{name: "murat"}
alır
İlgili veriye ulaşılana kadar "." konularak devam edilir.
let state = { olarak tanımlanmış bir object için:
users:[
{name: "Brock", age: 25, favoriteColor: "red"},
{name: "Jessie", age: 17, favoriteColor: "yellow"},
{name: "James", age: 41, favoriteColor: "blue"},
{name: "Winnie", age: 18, favoriteColor: "purple"}
],
settings:{
version: "1.0.5",
DNS: "105.xx.xx.xx",
website: "https://www.example.com/"
},
banList: ["Ash", "Angelica", "Tom", "Jerry"]
}
"banList" propertysinde 3. elemana ulaşmak istersek:
state.banList[2]
"settings"lerdeki "website" değerine ulaşmak istersek:
state.settings.website
"user"larda James'in en sevdiği rengi öğrenmek istersek:
state.users[2].favoriteColor
Henüz json dersini görmedim
Değişmeyen ve statik olarak kullanmanız gereken verileri JSON derslerinde de anlatıldığı gibi ".json "dosya eklentisi ile bir dizinde kaydedip uygulamanızda bu değişmeyen verilerden yararlanmak isteyebilirsiniz. Projenizde JSON dosyalarıyla çalışabilmeniz için önce onu dosyada import etmeniz ve obje şekline çevirmeniz gerekmektedir. Bu işlem çok basit bir şekilde yapılabilir.
Object.keys(objName)Key’lerden oluşan bir array döner
Object.values(objName)Value’lardan oluşan bir array döner
Object.entries(objName)[key, value] çiftlerinden oluşan bir array döner
Objeyi stringe çevirmek ve daha sonra json ile tekrar çekebilmek için:
JSON.stringify(objectName)
var person = {
name: 'Rumeysa', introduce keyine fonksiyon atadık.
surname: 'Turgut',
age: 23,
city: 'Istanbul',
introduce: function () { this içinde olduğu objeyi referans verir.
console.log(`My name is ${this.name} ${this.surname}, I'm ${this.age} yo.`);
},
};
metot tanımlanırken function() anahtar kelimesi kullanılarak yapılabileceği gibi EcmaScript6'nın arrow function yönteminin söz diziminden yararlanarak yapmak da mümkündür. Fakat burada dikkat edilmesi gereken noktalardan biri arrow functionlar this erişimine sahip değildir.
Önceden oluşturulmuş objeye fonksiyon eklemek için:
nesneİsmi.eklenecekMetotİsmi = function()
JavaScript'te fonksiyonlar da dahil olmak üzere çok tanımlama bir objedir. Bu obje tabanlı yapısı sayesinde fonksiyonları, başka fonksiyonlara parametre olarak verebilir ayrıca bir fonksiyon da döndürebiliriz.
Fonksiyonlar JavaScript dilinde, Function sınıfının birer objeleridir. ileri okuma için tıklayınız
Üstelik bu sınıfın bir kurucusu(constructor) ve diğer bütün objeler gibi inherit ettiği bir prototype bile var.
const fonksiyonAdi = () => {console.log("Merhaba Kodluyoruz")} çıktı: "fonksiyonAdi"
console.log(fonksiyonAdi.name);
Öyleyse JavaScript'te fonksiyonların da birer obje olduğunu öğrendik. Peki daha önce öğrendiğimiz şekilde bu js fonksiyonlarına birer yeni özellik ekleyebilir miyiz?
function Insan(isim,yas) { ile obje yapan bir fonksiyonu tanımladık.
this.isim = isim;
this.yas = yas;
}
Yukarıda gördüğünüz yapının adı JavaScript Object Constructor.
Bu obje şablonu bir sınıf olarak adlandırılır.
new anahtar kelimesi ile bu şablondan obje yapılabilir.
const ali = new Insan("ali",21); çıktı: 21
console.log(ali.yas);
Peki sınıflarda bu durum nasıl oluyor? Sınıf olarak belirlediğimiz şablona tanımı değiştirmeden nasıl fonksiyon veya özellik ekleyebiliriz?
İşte bu durumla karşılaştığımızda da prototype özelliği karşımıza çıkar. Peki prototype nedir?
Prototype, sınıflara JavaScript tarafından otomatik olarak eklenen bir objedir. Eklenmek burada çok doğru bir tabir değil. Aslında bütün objeler tarafından miras alınan bir özelliktir. Bu özelliği de "proto" key'i ile ekler. Bu prototype alanı içinde hem o objeyi kurduğumuz Sınıfın kurucu fonksiyonuna hem de proto objesine erişebiliriz. Bu prototype özelliğini kullanarak hem sınıfa hem objeye ihtiyacımız olan fonksiyonu ekleyebiliriz. Bu kısımların detayları JavaScript'te nesneye yönelik programlama konusuna ait olduğu için kapsamı genişletmeden birkaç örnek vererek konuyu tamamlayalım :
Sınıfa Prototype yardımıyla fonksiyon eklemek :
Insan.prototype.yeniFonksiyon = () => {console.log("Merhaba Kodluyoruz")} cıktı: "Merhaba Kodluyoruz"
const ayse = new Insan("ayşe",22);
ayse.yeniFonksiyon();
Objeye prototype yardımıyla fonksiyon eklemek:
ayse.__proto__.enYeniFonksiyon = () => {console.log("Tekrar Merhaba Kodluyoruz!")} çıktı: "Tekrar Merhaba Kodluyoruz!"
ayse.enYeniFonksiyon();
Her iki yöntemle de yapılan ekleme bu sınıfa ait tüm objeleri etkiler.
Destructuring bir obje veya bir array içinden her bir elemanın alınıp bir değişken içine kaydedilmesi işlemidir.
const objeAdi = {
key1: value1,
key2: value2,
key3: value3,
key4: value4
}
Bir objedeki değeri bir değişkene atamak için klasik yöntem:
const degisken1 = objeAdi.key1
Erişmek istediğimiz değer sayısı çok fazla ise bu yöntemle çok uzun sürer. Bunun yerine destructuring kullanılabilir:
const {key1, key2, key3, key4} = objeAdi
bu durumda değerler key isimleri ile çağırılabilir.
const cikarma = ( { sayi1, sayi2 } ) => { Bu satira dikkatObje oluşturulur
return sayi1 - sayi2;
}
const sayilar = { çıktı olarak 2 alınır.
sayi2: 3,
sayi1: 5
}
cikarma(sayilar);
çıkarma fonksiyonunun parametresine dikkat edin. orada süslü parantezler {} bir objeyi temsil etmez, destructuring işlemini temsil eder. Yani çıkarma fonksiyonuna gelen sayılar objesinin içinde sayi1 ve sayi2 property'leri bulunup parçalanıp fonksiyon içinde kullanılabilir hale gelecektir. Destructuring işlemi sırasında sıralama önemsizdir, yani fonksiyonu şu şekilde yazmış olsaydık da bir şey değişmeyecekti.
const cikarma = ( { sayi2, sayi1 } ) => {
}
fonksiyon için tanımlanan değerlerden biri eksikse fonksiyon NaN (Not a Number) döner
bölme işleminde bölen değer 0 veya hiçbir şey içermeyen null veya undefined olursa bölme işlemi tanımsız olur. Bu durumda da fonksiyon NaN döner.
Bunu önlemek için değişkene default değer atanabilir.
const bolme = ( { sayi1, sayi2 = 1} ) => { sayi2 için 1 default atandı ikinci sayı yok
return sayi1 / sayi2;
}
const sayilar = {
sayi1: 8 bu sefer sonuc 8, NaN degil. Fonksiyonda belirtilmediği sürece sayi2 1 olarak alınır.
}
bolme(sayilar);
standart destructuring sırasında değişken adı olarak key adı atanır. Farklı bir değişken atamak için destructuring sırasında belirtilmelidir.
const {key1, key2, key3, key4} = objeAdi value1 değerini alan değişkenin adı yeniDegisken1 olarak, value3 değerini alan değişkenin adı yeniDegisken3 olarak atandı.
const {key1: yeniDegisken1, key2, key3: yeniDegisken3, key4} = objeAdi
fonksiyonda destructuring işleminde elde edilenden daha fazla değer kullanılmak istenirse "//ReferenceError: sayi3 is not defined" gibi bir hata alınır. Bunu engellemek için kullanılmayan özellikler başka bir obje içine alınabilir ve oradan dönderilebilir.
const{key1, key2, ...newObj} = objeAdi
yazıldığında objeAdi objesindeki key1 ve key2 haricindeki değerler newObj adında başka bir objeye kopyalanır.
const{...newObj} = objeAdi yazıldığında objeAdi objesi newObj adı ile kopyalanır.
veya
let newObj = {...objeAdi}
Bu metod obje birleştirme ve yeni eleman ekleme için de kullanılabilir.
let yepyeniObj = {...newObj, ...objeAdi, key5: value5}
yepyeniObj ile 2 obje birleştirilip 1 de ilave değer atandı. Aynı key değerine sahip farklı value'lar olduğunda yazılma sırası önemli. Okumaya soldan başladığı için en sağda kalan bilgi en güncel olarak yeni obje içine kaydedilir.
Array destructuring işlemi array içinde anlatıldı: tıklayınız
try...catch ifadesini basitçe ifade edersek; Herhangi bir iş yaparken bir hatayla karşılaşılma durumunun ele alınması anlamına gelmektedir.
try anahtar kelimesi kodları çalışma zamanında test etmek için kullanılırken, catch anahtar kelimesi ise çalışma zamanında hata çıkması durumunda bu hataları yakalamak için kullanılır.
try {
Çalıştırılacak kodlar
}catch(hata) {
Hata yakalandığında çalışacak kodlar
}finally {
try tamamlandıktan sonra hata olsada olmasada çalışacak olan kodlar.
}
catch bloğunda yazılmış olan hata değişkeni oluşacak istisnayı taşıyacak olan değişken adıdır. Buraya herhangi bir isim verilebilir fakat yaygın olarak exceptionın ilk harfi olan e, err gibi ifadelerle isimlendirilir.
throw ifadesi bize özel hatalarımızı oluşturmanıza olanak tanır. Teknik olarak throw ile bir istisna (hata) atılabilir.
Örnek
JS kodu:
function valid(){
try {
if (document.querySelector("#dogumTarihi").value == "") {
throw 'Doğum tarihini boş geçemezsiniz';
};
}catch(err) {
alert(err);
}
}
Örnek: HackerRank
Bu örnekte gelen veri string ise tersten yazılışı çıktı olarak verilir. Veri string değil ise bizim atadığımız hata kodunu verir. Not: veri s değişkeni ile geliyor.
function reverseString(s) {
try {
if (typeof(s) != "string") throw "s.split is not a function";
let dizi = s.split("")
let newDizi = []
for(let i=dizi.length-1 ;i>-1; i-- ){
let item = dizi[i]
newDizi.push(item)
}
console.log(newDizi.join(""))
} catch(err) {
console.log(err);
console.log(s)
}
}
Fetch API ile yapabildiğimiz şey bir veri sunucudan geldikten sonra işlem yapabilmektir.
fetch(), bu yöntem bir kaynak almak için kullanılır. Headers, response/request başlıklarını temsil ederek bunları sorgulamanıza ve sonuçlara bağlı olarak farklı eylemler gerçekleştirmenize olanak tanır. Request, bir kaynak talebini temsil eder. Response, bir isteğe verilen yanıtı temsil eder.
Fetch API’ yi kullanmak için fetch metoduna istek yapacağımız url’ i parametre olarak vermek gerekiyor.
fetch(url);
fetch() metodundan sonra, metodun sonuna then() promise metodunu ekleriz:
.then(function() {
})
Obje oluştumak için {} kullanılır. key string olarak "" içine yazılır. Son key: value çiftinin sonuna virgül konulmaz.
json dosyasında açıklama satırı olduğunda hata veriyor.
Lokal .json dosyasından veri çekmek
fetch("data/settings.json").then(
response => {
return response.json()
}).then(responseJson=>{
console.log(responseJson)
console.log(responseJson.userName)
})
API üzerinden (online json serverdan) veri çekmek
kullanılan online server: https://jsonplaceholder.typicode.com/
fetch("https://jsonplaceholder.typicode.com/posts").then(
response => response.json()
).then(
responseJson => {
console.log(responseJson[0])
responseJson.forEach(item => {
console.log(item.id, item.title)
let liDOM = document.createElement("li")
liDOM.innerHTML = `item id: ${item.id} item title: ${item.title}`
userListDOM.appendChild(liDOM)
})
})
API üzerinden çelilen veri:
Hata yakalamak:
.catch((err) => console.log(err))
kodun en sonuna eklenir.