JavaScript'e Giriş

JavaScript, web sayfalarını etkileşimli hale getiren dünyanın en popüler programlama dilidir. Hem tarayıcıda (Client-side) hem de sunucuda (Node.js) çalışabilir.

JavaScript Neden Önemli?

script.js

// Konsola yazdırma
console.log("Merhaba Dünya!");

// Uyarı penceresi
alert("FediaTech'e Hoşgeldiniz!");

// Sayfa içeriğini değiştirme
document.body.innerHTML = "

JavaScript ile değiştirdim!

"; // Değişkenler let isim = "Ali"; const yil = 2026; console.log(`Merhaba ${isim}, yıl ${yil}`);
🔹 İpucu: Tarayıcınızın geliştirici araçlarını (F12) açıp "Console" sekmesinde anında JavaScript kodu yazıp deneyebilirsiniz!

Değişkenler ve Veri Tipleri

JavaScript'te değişken tanımlamak için let, const ve var kullanılır. Modern JavaScript'te var kullanımı önerilmez.

Anahtar Kelime Açıklama Kapsam (Scope)
let Değiştirilebilir değişken Blok scope
const Sabit (Değiştirilemez) Blok scope
var Eski yöntem (Kullanmayın) Function scope
degiskenler.js

// String
let ad = "Ahmet";
let soyad = 'Yılmaz';

// Number
let yas = 25;
let boy = 1.75;

// Boolean
let ogrenciMi = true;

// Null ve Undefined
let bos = null;       // Bilerek boş bırakılmış
let tanimsiz;         // Değer atanmamış (undefined)

// Array (Dizi)
let renkler = ["Kırmızı", "Yeşil", "Mavi"];

// Object (Nesne)
let kisi = {
    ad: "Ayşe",
    yas: 30,
    aktif: true
};

// typeof ile tip kontrolü
console.log(typeof ad);     // "string"
console.log(typeof yas);    // "number"
console.log(typeof kisi);   // "object"
                

Operatörler

Matematiksel ve mantıksal işlemler için kullanılır.

operatorler.js

// Aritmetik
let a = 10;
let b = 3;

console.log(a + b);  // 13
console.log(a - b);  // 7
console.log(a * b);  // 30
console.log(a / b);  // 3.333...
console.log(a % b);  // 1 (Mod alma - Kalan)
console.log(a ** b); // 1000 (Üs alma)

// Atama
let x = 5;
x += 2;  // x = x + 2 (7)
x *= 2;  // x = x * 2 (14)

// Karşılaştırma
console.log(5 == "5");   // true (Sadece değer)
console.log(5 === "5");  // false (Değer VE Tip) - Önerilen!
console.log(5 != 4);     // true
console.log(10 > 5);     // true

// Mantıksal
let ehliyet = true;
let yas = 17;

if (yas >= 18 && ehliyet) {
    console.log("Araba sürebilir");
}

if (yas < 18 || !ehliyet) {
    console.log("Süremez");
}
                

Koşul İfadeleri (If-Else)

kosullar.js

let saat = 14;

if (saat < 12) {
    console.log("Günaydın");
} else if (saat < 18) {
    console.log("İyi günler");
} else {
    console.log("İyi akşamlar");
}

// Ternary Operatörü (Kısa if-else)
let mesaj = (saat < 12) 🔹 "Erken" : "Geç";

// Switch Case
let gun = 3;

switch (gun) {
    case 1:
        console.log("Pazartesi");
        break;
    case 2:
        console.log("Salı");
        break;
    default:
        console.log("Diğer gün");
}
                

Döngüler (Loops)

donguler.js

// For Döngüsü
for (let i = 0; i < 5; i++) {
    console.log("Sayı:", i);
}

// While Döngüsü
let i = 0;
while (i < 5) {
    console.log(i);
    i++;
}

// Dizilerde Döngü (forEach - Modern)
const meyveler = ["Elma", "Armut", "Muz"];

meyveler.forEach(function(meyve) {
    console.log(meyve);
});

// Arrow Function ile (Daha kısa)
meyveler.forEach(meyve => console.log(meyve));

// for...of Döngüsü
for (let meyve of meyveler) {
    console.log(meyve);
}
                

Fonksiyonlar

Kod tekrarını önlemek için fonksiyonlar kullanılır.

fonksiyonlar.js

// 1. Fonksiyon Bildirimi (Function Declaration)
function topla(a, b) {
    return a + b;
}

// 2. Fonksiyon İfadesi (Function Expression)
const carp = function(a, b) {
    return a * b;
};

// 3. Ok Fonksiyonları (Arrow Functions - ES6)
const bol = (a, b) => {
    return a / b;
};

// Tek satırsa süslü parantez ve return gerekmez
const cikar = (a, b) => a - b;

console.log(topla(2, 3));   // 5
console.log(cikar(10, 4));  // 6
                

DOM Manipülasyonu

Document Object Model (DOM), HTML sayfasını JavaScript ile yönetmenizi sağlar.

Element Seçme

dom_secim.js

// ID ile seçme
const baslik = document.getElementById("baslik");

// Class ile seçme
const kartlar = document.getElementsByClassName("kart");

// Etiket ile seçme
const paragraflar = document.getElementsByTagName("p");

// Query Selector (En güçlüsü!)
const ilkKart = document.querySelector(".kart");       // İlk eşleşen
const tumKartlar = document.querySelectorAll(".kart"); // Tümü
const ozelButon = document.querySelector("#myForm button.submit");
                

İçerik ve Stil Değiştirme

dom_degistirme.js

const element = document.querySelector("#kutu");

// İçerik değiştirme
element.innerHTML = "Kalın yazı";
element.textContent = "Sadece düz metin";

// Attribute (Nitelik) işlemleri
element.setAttribute("id", "yeniId");
element.getAttribute("class");
element.removeAttribute("disabled");
element.hasAttribute("hidden");  // true/false

// Class işlemleri
element.classList.add("aktif");
element.classList.remove("gizli");
element.classList.toggle("acik");  // Var ise kaldır, yoksa ekle
element.classList.contains("aktif");  // true/false

// Style değiştirme
element.style.color = "red";
element.style.backgroundColor = "#f0f0f0";
element.style.fontSize = "20px";
element.style.display = "none";  // Gizle
element.style.display = "block"; // Göster
                

Element Oluşturma ve Ekleme

dom_olusturma.js

// Yeni element oluşturma
const yeniDiv = document.createElement("div");
yeniDiv.textContent = "Yeni eklenen içerik";
yeniDiv.classList.add("kart", "yeni");
yeniDiv.id = "yeniKart";

// Sayfaya ekleme
const container = document.querySelector(".container");
container.appendChild(yeniDiv);  // Sona ekle
container.prepend(yeniDiv);      // Başa ekle
container.insertBefore(yeniDiv, referansElement);

// insertAdjacentHTML ile kolay ekleme
container.insertAdjacentHTML("beforeend", `
    

Dinamik Kart

JavaScript ile eklendi!

`); // Element silme const silinecek = document.querySelector(".silinecek"); silinecek.remove(); // veya parent üzerinden container.removeChild(silinecek);

🔹 DOM Demo

DOM manipülasyonu burada...

Olaylar (Events)

Events, kullanıcı etkileşimlerini (tıklama, yazma, fare hareketi vb.) dinlemenizi ve yanıt vermenizi sağlar.

Event Listener Ekleme

events.js

const buton = document.querySelector("#myButton");

// addEventListener ile (Önerilen yöntem)
buton.addEventListener("click", function(event) {
    console.log("Butona tıklandı!");
    console.log("Tıklanan element:", event.target);
});

// Arrow function ile
buton.addEventListener("click", (e) => {
    e.preventDefault();  // Varsayılan davranışı engelle
    console.log("Arrow function çalıştı");
});

// Event listener kaldırma
function tiklama() {
    console.log("Tıklandı!");
}

buton.addEventListener("click", tiklama);
buton.removeEventListener("click", tiklama);
                

Yaygın Event Türleri

Event Açıklama Kullanım
click Tıklama Buton, link tıklamaları
dblclick Çift tıklama Özel işlemler
mouseover Fare üzerine geldiğinde Hover efektleri
mouseout Fare ayrıldığında Hover sonlandırma
keydown Tuş basıldığında Klavye kısayolları
keyup Tuş bırakıldığında Form girişi kontrolü
submit Form gönderildiğinde Form doğrulama
change Değer değiştiğinde Select, checkbox
input Her karakterde Anlık arama
scroll Sayfa kaydırıldığında Infinite scroll, lazy load

Form Events

form_events.js

const form = document.querySelector("#myForm");
const input = document.querySelector("#emailInput");

// Form gönderme
form.addEventListener("submit", (e) => {
    e.preventDefault();  // Sayfa yenilenmesini engelle
    
    const formData = new FormData(form);
    console.log("Email:", formData.get("email"));
    
    // Doğrulama
    if (!input.value.includes("@")) {
        alert("Geçerli bir email girin!");
        return;
    }
    
    console.log("Form gönderildi!");
});

// Anlık input takibi
input.addEventListener("input", (e) => {
    console.log("Yazılan:", e.target.value);
});

// Focus ve Blur
input.addEventListener("focus", () => {
    input.style.borderColor = "blue";
});

input.addEventListener("blur", () => {
    input.style.borderColor = "";
});
                

Diziler (Arrays)

JavaScript dizileri, birden fazla değeri tek bir değişkende saklamanızı sağlar. Modern JavaScript güçlü dizi metodları sunar.

Dizi Oluşturma ve Temel İşlemler

diziler.js

// Dizi oluşturma
const meyveler = ["Elma", "Armut", "Muz"];
const sayilar = [1, 2, 3, 4, 5];
const karisik = [1, "metin", true, null, {ad: "Ali"}];

// Elemanlara erişim
console.log(meyveler[0]);  // "Elma"
console.log(meyveler[meyveler.length - 1]);  // Son eleman

// Eleman ekleme/çıkarma
meyveler.push("Çilek");     // Sona ekle
meyveler.unshift("Karpuz"); // Başa ekle
meyveler.pop();             // Sondan çıkar
meyveler.shift();           // Baştan çıkar

// Eleman arama
const index = meyveler.indexOf("Armut");  // 1
const varMi = meyveler.includes("Muz");   // true

// Dizi birleştirme
const yeniDizi = [...meyveler, ...sayilar];  // Spread operator
const birlesik = meyveler.concat(sayilar);
                

Güçlü Dizi Metodları (ES6+)

dizi_metodlari.js

const ogrenciler = [
    { ad: "Ali", not: 85 },
    { ad: "Ayşe", not: 92 },
    { ad: "Mehmet", not: 78 },
    { ad: "Zeynep", not: 95 }
];

// forEach - Her eleman için işlem yap
ogrenciler.forEach((ogr, index) => {
    console.log(`${index + 1}. ${ogr.ad}: ${ogr.not}`);
});

// map - Yeni dizi oluştur (dönüştürme)
const isimler = ogrenciler.map(ogr => ogr.ad);
// ["Ali", "Ayşe", "Mehmet", "Zeynep"]

const notlar = ogrenciler.map(ogr => ogr.not * 1.1);
// Tüm notlara %10 eklendi

// filter - Koşula uyan elemanlar
const basarililar = ogrenciler.filter(ogr => ogr.not >= 80);
// [{ ad: "Ali", not: 85 }, { ad: "Ayşe", not: 92 }, { ad: "Zeynep", not: 95 }]

// find - İlk eşleşeni bul
const zeynep = ogrenciler.find(ogr => ogr.ad === "Zeynep");

// findIndex - İlk eşleşenin indeksi
const mehmetIndex = ogrenciler.findIndex(ogr => ogr.ad === "Mehmet");

// reduce - Tek değere indirge
const toplamNot = ogrenciler.reduce((acc, ogr) => acc + ogr.not, 0);
const ortalama = toplamNot / ogrenciler.length;

// sort - Sırala
const sirali = [...ogrenciler].sort((a, b) => b.not - a.not);
// Büyükten küçüğe sıralandı

// some ve every
const hepsiGectiMi = ogrenciler.every(ogr => ogr.not >= 50);  // true
const birisi90Ustu = ogrenciler.some(ogr => ogr.not > 90);    // true

// Zincirleme kullanım
const sonuc = ogrenciler
    .filter(ogr => ogr.not >= 80)
    .map(ogr => ogr.ad)
    .sort();
// ["Ali", "Ayşe", "Zeynep"]
                
🔹 Best Practice: map, filter, reduce metodlarını öğrenmek JavaScript'te ileri seviye kod yazmanın anahtarıdır!

Objeler (Objects)

Objeler, ilişkili verileri anahtar-değer çiftleri olarak saklamanızı sağlar. JavaScript'te objeler son derece esnek ve güçlüdür.

Obje Oluşturma ve Erişim

objeler.js

// Obje oluşturma
const ogrenci = {
    ad: "Ali",
    soyad: "Yılmaz",
    yas: 17,
    notlar: [85, 90, 78],
    adres: {
        sehir: "Kayseri",
        ilce: "Melikgazi"
    },
    // Metod
    tamAd() {
        return `${this.ad} ${this.soyad}`;
    },
    ortalama() {
        const toplam = this.notlar.reduce((a, b) => a + b, 0);
        return toplam / this.notlar.length;
    }
};

// Erişim yöntemleri
console.log(ogrenci.ad);           // "Ali"
console.log(ogrenci["soyad"]);     // "Yılmaz"
console.log(ogrenci.adres.sehir);  // "Kayseri"
console.log(ogrenci.tamAd());      // "Ali Yılmaz"
console.log(ogrenci.ortalama());   // 84.33

// Değer ekleme/değiştirme
ogrenci.email = "ali@fediatech.com";
ogrenci.yas = 18;

// Değer silme
delete ogrenci.email;

// Anahtar kontrolü
console.log("ad" in ogrenci);  // true
console.log(ogrenci.hasOwnProperty("soyad"));  // true
                

Object Destructuring (ES6+)

destructuring.js

const kullanici = {
    ad: "Ayşe",
    email: "ayse@fediatech.com",
    yas: 25,
    rol: "developer"
};

// Klasik yöntem
const ad = kullanici.ad;
const email = kullanici.email;

// Destructuring (Modern yöntem)
const { ad, email, yas } = kullanici;
console.log(ad, email, yas);

// Yeniden adlandırma
const { ad: isim, email: mail } = kullanici;
console.log(isim, mail);

// Varsayılan değer
const { ad, sehir = "Bilinmiyor" } = kullanici;

// İç içe destructuring
const { adres: { sehir, ilce } } = ogrenci;

// Fonksiyon parametresinde destructuring
function kullaniciBilgisi({ ad, email, rol = "user" }) {
    console.log(`${ad} (${email}) - ${rol}`);
}

kullaniciBilgisi(kullanici);
                

Spread ve Rest Operatörleri

spread_rest.js

// Spread - Objeyi kopyala/birleştir
const orijinal = { a: 1, b: 2 };
const kopya = { ...orijinal };
const genisletilmis = { ...orijinal, c: 3, d: 4 };

// Objeleri birleştirme
const varsayilan = { tema: "dark", dil: "tr" };
const kullanici = { dil: "en", isim: "Ali" };
const ayarlar = { ...varsayilan, ...kullanici };
// { tema: "dark", dil: "en", isim: "Ali" }

// Rest - Geri kalanları topla
const { ad, ...diger } = kullanici;
// ad = "Ali"
// diger = { email: "...", yas: 25, rol: "..." }
                

Asenkron JavaScript

JavaScript tek iş parçacıklı (single-threaded) çalışır, ancak asenkron programlama sayesinde uzun süren işlemler (API çağrıları, dosya okuma) ana iş parçacığını bloklamadan yapılabilir.

Callback, Promise ve Async/Await

async.js

// 🔹 Callback Hell (Eski yöntem - Kaçının!)
veriGetir(url, function(veri) {
    isleVeri(veri, function(sonuc) {
        kaydet(sonuc, function(id) {
            console.log("Kaydedildi:", id);
        });
    });
});

// 🔹 Promise zinciri
veriGetir(url)
    .then(veri => isleVeri(veri))
    .then(sonuc => kaydet(sonuc))
    .then(id => console.log("Kaydedildi:", id))
    .catch(hata => console.error("Hata:", hata));

// 🔹 Async/Await (En modern ve okunabilir)
async function veriIsle() {
    try {
        const veri = await veriGetir(url);
        const sonuc = await isleVeri(veri);
        const id = await kaydet(sonuc);
        console.log("Kaydedildi:", id);
    } catch (hata) {
        console.error("Hata:", hata);
    }
}
                

Promise Oluşturma

promise.js

// Promise oluşturma
function bekle(ms) {
    return new Promise((resolve, reject) => {
        if (ms < 0) {
            reject(new Error("Süre negatif olamaz!"));
        }
        setTimeout(() => {
            resolve(`${ms}ms beklendi`);
        }, ms);
    });
}

// Kullanım
bekle(2000)
    .then(mesaj => console.log(mesaj))
    .catch(hata => console.error(hata));

// Async/Await ile
async function main() {
    const mesaj = await bekle(2000);
    console.log(mesaj);
}

// Promise.all - Paralel çalıştırma
async function tumVerilerGetir() {
    const [kullanicilar, urunler, siparisler] = await Promise.all([
        fetch("/api/kullanicilar").then(r => r.json()),
        fetch("/api/urunler").then(r => r.json()),
        fetch("/api/siparisler").then(r => r.json())
    ]);
    
    console.log(kullanicilar, urunler, siparisler);
}

// Promise.race - İlk tamamlanan
const enHizli = await Promise.race([
    fetch(server1),
    fetch(server2),
    fetch(server3)
]);
                

API Kullanımı (Fetch)

Fetch API, sunucudan veri almak veya sunucuya veri göndermek için kullanılan modern JavaScript metodudur. AJAX işlemlerinin modern karşılığıdır.

GET İsteği

fetch_get.js

// Basit GET isteği
async function kullanicilariGetir() {
    try {
        const response = await fetch("https://jsonplaceholder.typicode.com/users");
        
        if (!response.ok) {
            throw new Error(`HTTP Hatası: ${response.status}`);
        }
        
        const kullanicilar = await response.json();
        console.log(kullanicilar);
        
        // Verileri göster
        kullanicilar.forEach(k => {
            console.log(`${k.name} - ${k.email}`);
        });
        
    } catch (hata) {
        console.error("Veri alınamadı:", hata);
    }
}

kullanicilariGetir();

// Tek kullanıcı getir
async function kullaniciGetir(id) {
    const response = await fetch(`https://jsonplaceholder.typicode.com/users/${id}`);
    return await response.json();
}

const ali = await kullaniciGetir(1);
console.log(ali.name);
                

POST, PUT, DELETE İstekleri

fetch_crud.js

// POST - Yeni kayıt oluştur
async function yeniKullaniciEkle(kullanici) {
    const response = await fetch("https://jsonplaceholder.typicode.com/users", {
        method: "POST",
        headers: {
            "Content-Type": "application/json"
        },
        body: JSON.stringify(kullanici)
    });
    
    return await response.json();
}

const yeniKullanici = await yeniKullaniciEkle({
    name: "Ali Yılmaz",
    email: "ali@fediatech.com",
    username: "aliyilmaz"
});

console.log("Eklendi:", yeniKullanici);

// PUT - Güncelle
async function kullaniciGuncelle(id, veri) {
    const response = await fetch(`https://jsonplaceholder.typicode.com/users/${id}`, {
        method: "PUT",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify(veri)
    });
    
    return await response.json();
}

// DELETE - Sil
async function kullaniciSil(id) {
    const response = await fetch(`https://jsonplaceholder.typicode.com/users/${id}`, {
        method: "DELETE"
    });
    
    return response.ok;
}

const silindi = await kullaniciSil(1);
console.log(silindi 🔹 "Silindi" : "Silinemedi");
                

🔹 API Demo

API sonucu burada görünecek...
🔹 Bilgi: CORS (Cross-Origin Resource Sharing) hataları alırsanız, sunucu tarafında gerekli ayarların yapılması gerekir. Geliştirme aşamasında proxy kullanabilirsiniz.