Konu Listesi

  • Tümünü göster
  • Değişkenler
  • Sayı veri türü ve temel aritmetik işlemler
  • Boolean Veri Türü ile Çalışmak
  • Veri türünü öğrenme
  • Template Literals Kullanımı
  • String veri türü işlemleri
  • DOM
  • prompt ile kullanıcıdan bilgi almak.
  • Liste İçerisindeki Öğeye Erişmek ve Yeni Öğe Eklemek
  • DOM'a CSS Class Bilgisi Eklemek veya Çıkarmak
  • Karşılaştırma Operatörleri ve Mantıksal Operatörler
  • Koşul Yapısı Kullanımı
  • Fonksiyonlar
  • Parametre ve Return
  • Fat Arrow
  • DOM Event
  • localStorage ile Veri Eklemek, Düzenlemek ve Silme
  • Form ve Form Submit Yönetimi
  • Input içerisinden Değer Almak
  • Dizi (Array) Oluşturmak ve Dizi İçindeki Elemanlara Ulaşmak
  • Diziye Yeni Eleman Eklemek, Çıkartmak ve Güncellemek
  • Array (Dizi) Metotlarının Kullanımı ve Array içinde Array Oluşturma
  • For Döngüsü Kullanımı
  • break 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ı
  • Object (Nesne) Nedir? Nasıl Oluşturulur?
  • Object Anahtar (Key) ve Değer (Value) Yapısının Kullanımı/Erişimi
  • Nesnelere Nasıl Metot Ekleriz?
  • Prototype Konusu ve Prototype Yöntemi
  • Object ve Array Destructuring Kullanımı
  • Try ve Catch Kullanımı (Hata Yönetimi)
  • Fetch API ile Çalışmak

Değişkenler

Değişken nedir: en basit tabirle değerleri hafızada tutmak için kullanılan yapılardır.

    Değişken isimlendirmede dikkat etmemiz gerekenler şunlardır.
  • Değişken isimleri harf, _ veya $ işareti ile başlayabilir. Fakat ES5 (ECMAScript 5) birlikte gelen özellikle UNICODE kodları kullanılırken kaçış karakteri olarak kullanılan \ işareti ilk karakter olarak kullanılabilir.
  • İlk harften sonra değişken isimlerinde rakamlar da kullanılabilir. $ ve _ dışında başka noktalama işaretleri kullanılamaz
  • Değişken ismindeki harfler arasında boşluk kullanılamaz.

var ile tanımlama (eski metot)

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

let ile tanımlamak

ö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;
adres = "23 nisan mah.";
console.log(adres);
adres = adres + " Köroğlu cad"
console.log(adres);
sonuç:
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);

const ile tanımlamak

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

Sayı veri türü ve temel aritmetik işlemler

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

toplama ve çıkartma

değeri tanımladıktan sonra aşağıdaki ifadelerin hepsi değeri a kadar arttırır
x = x+a
x += a
x ++
ise 1 arttırır
aşağıdaki ifadeler ise a kadar azaltır
x = x - a;
x -= a;
x --;
ise 1 azaltır

çarpma ve bölme

değer tanımlandıktan sonra
x = x * a;
x *= a;
x değerini a katına çıkartır
x = x/a;
x /= a;

x değerini a ya böler

mod alma

% işareti ile yapılır
x = x % a;
değerinde x a ya bölündüğünde kalan değeri alır.

Üs alma

x = x ** a
x in a üssünü verir

Aşağı ve yukarı yuvarlama

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

Sayısal ibareyi metin olarak aktarma ve bunu geri çevirmek

" " 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

Boolean Veri Türü ile Çalışmak

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.

Veri türünü öğrenme typeof()

console.log(typeof(değişken)) yazdığımızda konsolda veri türü yazar

Veri türü değiştirme

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.

Veriden sayıyı çekmek 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

sayısı metne çevirme .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.

mantıksal ifadeye çevirme Boolean

Boolean 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

Nesneler için tip zorlama (Type Coercion)

    Primitif tipler için:
  1. Eğer değer(input) primitif ise herhangi bir işlem yapma, dön.
  2. input.toString() metodunu çağır(Call). Eğer sonuç primitif ise dön.
  3. input.valueOf() metodunu çağır(Call). Eğer sonuç primitif ise dön.
  4. Ne input.toString() ne de input.valueOf() primitif sonuç vermiyorsa; TypeError fırlat.
    Referans tipler için:
  1. input.toString() metodunu çağır(Call). Eğer sonuç primitif ise dön.
  2. input.valueOf()metodunu çağır(Call). Eğer sonuç primitif ise dön.
  3. Ne input.toString() ne deinput.valueOf() primitif sonuç vermiyorsa; TypeError fırlat.

Detaylı örnekler için tıklayınız

Template Literals Kullanımı

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

String veri türü işlemleri

karakter sayısı.length

console.log(email.length)

ilk karakteri bulma

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.

Büyük ve Küçük Harfe Çevirme

email = email.toUpperCase()
console.log(email)
tamamı büyük harfe çevrildi ve yazdırıldı.

email = email.toLowerCase()
console.log(email)
tamamı küçük harfe çevrildi ve yazdırıldı.

Sting İçinde Arama ve Yerini Bulma

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

Belli Bir Yere Kadar Olanı Almak .slice

console.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.

Değiştirmek .replace

Değ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");
console.log(email)
çıktı olarak drmuratgokduman@renault.com verir

İstediğim bilgi var mı .includes

istediğim bilgi ilgili değişkende var mı? true veya false verir.
email.includes("@"); çıktı olarak true verir.

Bununla başladı mı? .startsWith Bununla bitti mi? .endsWith

bir 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.

Belirli bir sıradaki veriyi çekmek

.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.

Metni Diziye Çevirme .split

Metni belirtilen karakterden bölerek diziye çevirir
let isim = ‘Oguz,Kamer’;
let isimler = isim.split(’,');
console.log(isimler);
Çıktısı: 'Oğuz', 'Kamer'

DOM (Document Object Model)

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.

DOM içerisinden Etiket ve ID ile Öğe Seçimi

ö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.

DOM içerisinden Etiket ve ID ile Öğe Seçimi

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:

Liste İçerisindeki Öğeye Erişmek ve Yeni Öğe Eklemek

Listedeki ilk ve son ögeyi değiştirmek

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.

Öge Eklemek

Ö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);

  • Lorem.
  • Eaque!
  • Similique!
  • Voluptates.
  • Tempora!

DOM'a CSS Class Bilgisi Eklemek veya Çıkarmak

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.

Class bilgisi eklemeyi denediğimiz başlık

Karşılaştırma Operatörleri ve Mantıksal Operatörler

Karşılaştırma Operatörleri

Eşitse ==

iki değerin eşitliğin değerlendirir ve çıktı olarak true/false verir
var a = 10;
var b = "10";
console.log(a==b)
çıktısı true

türü ve değeri eşitse ===

var a = 10;
var b = "10";
console.log(a==b)
çıktısı true

Eşit değilse != ve !==

console.log(a!=b) çıktısı false

console.log(a!==b) çıktısı true

küçükse <

console.log(a < b) çıktısı false

küçük veya eşitse se <=

console.log(a <= b) çıktısı true

büyükse >

console.log(a > b) çıktısı false

küçük veya eşitse se <=

console.log(a >= b) çıktısı true

Mantıksal Operatörler

ve &&

birbirine bağladığı her karşılaştırma true ise true verir.

veya ||

birbirine bağladığı değerlerden biri true ise true verir.

değil !

dahil olduğu ifadenin değerini tersine çevirir

Koşul Yapısı Kullanımı if / else

eğ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)}
else{conslole.log("kullanıcı adı yok")};
if içindeki yapı true ise süslü parantezdeki fonksiyon çalışır. yapı false ise else içindeki fonksiyon çalışır.

Çoklu Koşul

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")
let age = prompt("lütfen yaşınızı giriniz")
let infoEhliyet = document.querySelector("#Ehliyet")
ile tanımlar yapılır.
if (userName && age >= 18){
infoEhliyet.innerHTML = "ehliyet alabilir"
} else if (!userName){
infoEhliyet.innerHTML = "kullanıcı adı girilmedi"
} else if (userName && !(age >= 18)){
infoEhliyet.innerHTML = "Yaşın tutmuyor" }
ile koşul belirtilir.

switch ile çoklu koşul

mantı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) {
case "Yagmurlu":
ile ilk case atanır.
console.log("Semsiyeni yanina almayi unutma"); ile çıktısı alınır. break; ile bir sonraki case e geçilir. case "Bulutlu":
console.log("Disari cik");
break;
case "Karlı":
console.log("Kalin giyin");
break;
case "Firtinali":
console.log("Bir süre disari cikma");
break;
default:
ile diğer değerlere uymayan durumlar için sonuç alır
console.log("Bilinmeyen hava durumu:" , hava);
}

Ternary Operatör ( Koşul ? Doğruysa : Yanlışsa) ile If Kullanımı

let userName = prompt("Lütfen adınızı giriniz")
let age = prompt("lütfen yaşınızı giriniz")
let infoEhliyet = document.querySelector("#Ehliyet")
ile tanımlar yapılır.
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

Bölüm Sonu Egzersizi

Buraya not bilgisi gelecek. Bilgi prompt ile alındığından, fonksiyon JS içinden kapatıldı

Fonksiyonlar

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.

Fonksiyonu Adlandırmak

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}

Anonim fonksiyonların (Anonymous Functions)

kendine ait bir adı yoktur. Bir değişkene tanımlanır.

let degiskenAdi = function(parametre){işlev}

Değer Döndüren Fonksiyonlar return

Bazen 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.

Lokal ve Global Değişkenler

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.

Callback Fonksiyonlar ve Asenkron Çalışma

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; };
var sonuc = topla(10,20);
30 döner
function carp(sayi1, sayi2) { sayi1 * sayi2; };
result=carp(10,20);
return olmadığı için undefined döner

Arrow Functions

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:)');
}

Recursion

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 ve Return

parametre

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

Return

bir fonksiyonun işlem sonunda javascript içinde bir sonuç vermesi için return kullanılır

Fat Arrow => ile fonksiyon yazmak

versiyon 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ı

fat arrow içinde "this" keyword

this içinde yer aldığı nesneyi temsil eder. nesne içinde fonksiyonda this kullanıldığıda geleneksel fonksiyonda nesneyi, fat arrowda globali refere eder

DOM Event

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.

1. Metot

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ı"); })

2. Metot

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ı"); })

3. Metot

element.event = function(){fonksiyon içeriği};

Ödev

Mouse Etkinliği

Mouse tıklaması ile gerçekleşen etkinliktir.
dblclick çift tıklama
click tıklama
vs

Klavye Etkinliği

Klavyeden herhangi bir tuşa tıklanması sonucu gerçekleşen etkinliklerdir.

Form Etkinlikleri

Seçimim:

Kabarcıklanma Etkinliği(Event Bubbling) ve Yakalama Etkinliği(Event Capturing)

Kabarcıklanma Etkinliği(Event Bubbling)

İç 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.

2.Yakalama Etkinliği(Event Capturing)

İç 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 Silme

Local Storage Nedir?

HTML 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.

Nasıl Kullanılır?

HTML 5 ile tarayıcılar iki tane yerel kayıt türünü desteklemektedir.

  • localStorage
  • sessionStorage

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.

Veri Ekleme

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.

Veri Okuma

window.localStorage.getItem("key"); Eğer veri daha önce kaydedilmeyen bir veriyi okumaya çalıştığımızda null değeri geri dönmektedir.

Veri Silme

localStorage.removeItem("key"); sadece verilen anahtarı ve değerini siler. localStorage.clear(); tüm verileri siler

Örnek uygulama

__ 100 __

localStorage İçine Farklı Türde Veriler Eklemek

Local 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 ve Form Submit Yönetimi

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.

Temel Input Tipleri

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 Eventleri

onSubmit 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.

Örnek uygulamalar:

Birinci Örnek:

Reset butonu girilen veriyi göndermez. formu temizler

button type="submit" her tıklandığında sayfayı yeniler. Bunu engellemek için javascript tarafına aşağıdaki tanım ve kod yazılır. let formDOM = document.querySelector("#userForm")
formDOM.addEventListener("submit", formSubmit)
function formSubmit(event){
event.preventDefault()
event.preventDefault() eventin default ayarını iptal eder.
}

İkinci Örnek

Form Özellikleri

action

Formunuzu 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"

method

Form 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"

autocomplete

Ingilizce 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"

novalidate

Aktif olduğu sürece gönderdiğiniz form datanızın otomatik olarak doğrulanmamasını söyler.

form action="/my_script.js" novalidate

input özellikleri

fname

Görünecek olan yazıyı belirler. Bu yazı, adete bir html etiketi gibi görünür.

type

Bu kısımda formunuzun text/numerik bir form olacağına karar verirsiniz.

name

Input'unuzun name özelliğini belirlersiniz. Genelde isimlendirme küçük harf verilir backend kısmına uygun olması için

value

Input'taki aktif görünecek olan yazı için verilir. Örnek olarak butonların üzerindeki yazı gibi düşünebiliriz.

input içerisinden Değer Almak

input etiketinde name bilgisi olmak zorunda.

Örnek 1

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")
formDOM.addEventListener("submit", formSubmit)
function formSubmit(event){
event.preventDefault()
buraya kadarı önceki açıklamada

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.
}

Örnek 2

Name:

Age:

E-Mail:


Bölüm Sonu Egzersizi

  • Örnek liste elemanı 14

Dizi (Array) Oluşturmak ve Dizi İçindeki Elemanlara Ulaşmak

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.

Dizi İçerisindeki Elemanlara Erişim

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 fonksiyonu

dizideki her bir değere işlem yapmak için kullanılır. diziAdi.forEach((item, index) => {
console.log(item, index);
});
ile her item index bilgisi ile konsola yazıldı.

Bu array mi?

typeof(diziAdi) sorgulanan veri dizi ise object çıktısı verir.
Array.isArray(diziAdi) sorgulanan veri dizi ise true verir.

Diziye Yeni Eleman Eklemek, Çıkartmak ve Güncellemek

diziye eleman eklemek

push() Metodu

var olan dizinin sonuna eleman ekler
diziAdi.push("eklenecek öge")

unshift() Metodu

var olan dizinin başına eleman ekler
diziAdi.unshift("eklenecek öge")

Diziden eleman silmek

pop() Metodu

dizinin son elemanını siler
diziAdi.pop("eklenecek öge")

shift() Metodu

dizinin ilk elemanını siler
diziAdi.pop("eklenecek öge")

splice() Metodu

Metodun 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")
console.log(ornekDizi)
1, 2, 3, "dört", dört buçuk", 5
cosole.log(ayrılanDizi) 4

Array (Dizi) Metotlarının Kullanımı ve Array içinde Array Oluşturma

Array içinde Array oluşturmak

öge eklemek ile aynı yöntemle (unshift ve push ile) array içine array eklenebilir

Array içinden öge ayırmak .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]
let yeniDizi = diziAdi.splice(2, 3)
console.log(diziAdi)
[1, 2, 6]
console.log(yeniDizi) [3, 4, 5]

Değer array içinde var mı? .includes()

parantez içine aranacak değer yazılır.
diziAdi.includes("arananDeger") Boolean (true/false) olarak çıktı alınır.

Array içindeki ögenin index bilgisini bulmak .indexOf

parantez içine aranacak değer yazılır.
let diziAdi = [1, 2, 3, 4, 5, 6]
diziAdi.indexOf(3)
2 değerini verir.
olmayan bir değer arandığında -1 verir.

Array Kopyalamak

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 destructuring

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ı.

Array birleştirme

.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"]

Array içindeki bilgiyi String'e çevirmek

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.

.some

dizi 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];
const sonuc1 = sayilar.some(function(sayi) {
return sayi > 5 ;
});
beşten büyük değer dizide olduğundan çıktı olarak true verir. const sayilar = [4,5,6];
const sonuc1 = sayilar.some(function(sayi) {
return sayi > 8 ;
});
sekizden büyük değer dizide olmadığından çıktı olarak false verir.

.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];
const found = array1.find(element => element > 10);
console.log(found);
expected output: 12
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];
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);
// Çıktı olarak [10, 5, 4, 3, 2] alırız.
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.

For Döngüsü Kullanımı

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)
{
console.log(i)
ilk değerden başlayarak koşul sağlandığı sürece bütün "i" değerleri konsola yazdırılır.
} çıktı: 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0

break ve contiune Kullanımı

Break: burada dur
Continue: bunu atla

Break:

break ifadesi içinde bulunduğu döngüyü sonlandırmak için kullanılır. Dış döngü varsa işlemeye devam eder.

Etiketli Break:

Devamına etiketini aldığı döngüyü sonlandırır.

Örnek: cikis_etiketi: for (var i = 0; i <= 5; i++) {
for (var j = 0; j <= 50; j++) {
if (j == 9) {
break cikis_etiketi;
}
console.log("iç döngüden j :" + j);
}
}
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ı.

Continue:

İçinde bulunduğu döngüde kendisine tanımlanan şarta denk geldiğinde işlem yapmayıp sonraki ifadeden devam edilmesini sağlar.

Etiketli Continue:

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);
degisken ++ ;
ile yapılacak işlem tanımlanır.
} çı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];
const newArray = [];
ile arrayler tanımlanır.
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 Eklenmesi

filter 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];
const filtrelenmisSayilar = sayilar.filter(function(sayi) {
return sayi >3;
});
console.log(filtrelenmisSayilar);
// Orijinal diziyi 3'ten büyük olan sayılar için filtrelediğimizde yeni oluşacak dizi [4,5] olacaktır. console.log(sayilar); // Orijinal dizi bozulmayacağından çıktıda [1,2,3,4,5] olarak görürüz.

Örnek 2:
const users = [
{fullName: "Mehmet Veli", isActive: false},
{fullName: "Ali Duran", isActive: true},
{fullName: "Ahmet Yılmaz", isActive: true},
{fullName: "Oğuz Şahin", isActive: false},
]
ile ilk array tanımlanır.
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]
const yeniArray = sayilar.map(deger => {
return deger * 2
})
tek işlem varsa return kullanmadan da yazılabilir.
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 => {
return{userName: item, shortName: `${item[0]}.`, newName: `${item[0].toUpperCase()}${item.slice(1).toLowerCase()}`}
})
returndan sonraki köşeli parantez oluşturduğumuz şeyin obje olduğunu belirtiyor.
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()}`}
))

Object (Nesne) Nedir? Nasıl Oluşturulur?

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";
let başkaBirMesaj = "merhaba";
console.log(mesaj == başkaBirMesaj);
çıktı: true
aynı değerlere, farklı memory adresslere sahip 2 obje:
let obje = {
mesaj:"merhaba"
}
let başkaBirObje = {
mesaj:"merhaba"
}
console.log(obje == başkaBirObje);
çıktı: false
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.

Obje Oluşturmak

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.

Object Literals

{} kullanılarak değişkene tanımlanır. key-value çiftleri "," ile ayrılır.
let newObject = {
key1: value1,
key2: value2
}

New Keyword ile Obje Oluşturmak

let newObject = new Object()
newObject.key1 = value1;
newObject.key2 = value2;

Object.create ile Obje Oluşturmak

Baş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.

Key'i silmek

delete(newObject.keyName)

Object Anahtar (Key) ve Değer (Value) Yapısının Kullanımı/Erişimi

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.

Computed property kullanımı

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){
return{
[x]: y
}
}
fonksiyonu tanımlandığında:
objeYapma("name", "murat")
cikti olarak: {name: "murat"} alır

Kompleks Objeler Kullanımı

İlgili veriye ulaşılana kadar "." konularak devam edilir. let state = {
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"]
}
olarak tanımlanmış bir object için:
"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

JSON Veri Tipini Obje Olarak Kullanmak

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.

Obje Metodları

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

JSON Metodları

Objeyi stringe çevirmek ve daha sonra json ile tekrar çekebilmek için:
JSON.stringify(objectName)

Nesnelere Nasıl Metot Ekleriz?

var person = { name: 'Rumeysa',
surname: 'Turgut',
age: 23,
city: 'Istanbul',
introduce: function () {
introduce keyine fonksiyon atadık.
console.log(`My name is ${this.name} ${this.surname}, I'm ${this.age} yo.`);
this içinde olduğu objeyi referans verir.
},
};

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()

Prototype Konusu ve Prototype Yöntemi

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")}
console.log(fonksiyonAdi.name);
çıktı: "fonksiyonAdi"

Ö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) {
this.isim = isim;
this.yas = yas;
}
ile obje yapan bir fonksiyonu tanımladık.
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);
console.log(ali.yas);
çıktı: 21

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")}
const ayse = new Insan("ayşe",22);
ayse.yeniFonksiyon();
cıktı: "Merhaba Kodluyoruz"

Objeye prototype yardımıyla fonksiyon eklemek:
ayse.__proto__.enYeniFonksiyon = () => {console.log("Tekrar Merhaba Kodluyoruz!")}
ayse.enYeniFonksiyon();
çıktı: "Tekrar Merhaba Kodluyoruz!"

Her iki yöntemle de yapılan ekleme bu sınıfa ait tüm objeleri etkiler.

Object ve Array Destructuring Kullanımı

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.

Fonksiyona Parametre Girerken Destructuring

const cikarma = ( { sayi1, sayi2 } ) => { Bu satira dikkat
return sayi1 - sayi2;
}
const sayilar = {
Obje oluşturulur
sayi2: 3,
sayi1: 5
}
cikarma(sayilar);
çıktı olarak 2 alınır.
çı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ı
return sayi1 / sayi2;
}
const sayilar = {
sayi1: 8
ikinci sayı yok
}
bolme(sayilar);
bu sefer sonuc 8, NaN degil. Fonksiyonda belirtilmediği sürece sayi2 1 olarak alınır.

Destructuring sırasında değişken adını key adından farklı oluşturmak

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
const {key1: yeniDegisken1, key2, key3: yeniDegisken3, key4} = objeAdi
value1 değerini alan değişkenin adı yeniDegisken1 olarak, value3 değerini alan değişkenin adı yeniDegisken3 olarak atandı.

Rest Operator

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
veya let newObj = {...objeAdi}
yazıldığında objeAdi objesi newObj adı ile kopyalanır.

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 ve Catch Kullanımı (Hata Yönetimi)

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 İle İstisnalar Oluşturma

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 Çalışmak

Fetch API ile yapabildiğimiz şey bir veri sunucudan geldikten sonra işlem yapabilmektir.

Fetch Interfaces

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.

Temel Fetch Kullanımı

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() { })

JSON kullanımı (örnek için gerekli)

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.

Örnekler:

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.