70 – Javascript Mülakat Sorusu

JavaScript

JavaScript Sıkça Sorulan Sorular ve Cevapları

JavaScript, web geliştirmede vazgeçilmez bir dil haline gelmiştir. Dinamik web siteleri oluşturmanın yanı sıra, sunucu tarafı programlamada da kullanılmaktadır. Bu makalede, JavaScript ile ilgili sıkça sorulan sorulara ve bu soruların cevaplarına yer vereceğiz.

  1. undefined ve null arasındaki fark nedir?
  • undefined, bir değişkenin değer atanmamış olduğunu gösterir. Bir değişken tanımlanmış ancak herhangi bir değer atanmamışsa JavaScript’te undefined değerini alır.
  • null, bir değişkenin bilinçli olarak “boş” veya “değersiz” olarak tanımlandığını gösterir. Programcı tarafından bir değişkene değer olarak atanabilir.
				
					let degisken; // undefined, çünkü bir değer atanmamış
console.log(degisken); // undefined

let bos = null; // null, çünkü bilinçli olarak boş bir değer atandı
console.log(bos); // null

				
			

2. && operatörü ne işe yarar?

  • && mantıksal VE operatörüdür. İki operandı da doğru (truthy) ise true değerini döndürür. Eğer operandlardan biri yanlış (falsy) ise false döndürür.
				
					console.log(true && true); // true
console.log(true && false); // false

				
			
  1. || operatörü ne işe yarar?
    • || mantıksal VEYA operatörüdür. Operandlardan en az biri doğru (truthy) ise true değerini döndürür. İki operand da yanlış (falsy) ise false döndürür.
				
					console.log(false || true); // true
console.log(false || false); // false

				
			

4. Bir string’i sayıya çevirmek için + veya ünary plus operatörü en hızlı yol mudur?

  • Ünary plus (+) operatörü, string ifadeleri sayılara çevirmek için kullanılan pratik ve hızlı bir yöntemdir. Ancak “en hızlı” olup olmadığı JavaScript motorunun optimizasyonlarına bağlıdır ve genellikle bu tür mikro optimizasyonlar modern web uygulamalarında göz ardı edilebilir farklar yaratır.
				
					let stringDeger = "123";
let sayiDeger = +stringDeger; // 123 olarak sayıya dönüştürülür

				
			

5. DOM nedir?

  • DOM (Document Object Model), HTML ve XML belgelerinin programatik olarak erişilip değiştirilmesini sağlayan bir programlama arayüzüdür. Web sayfalarının içeriğini, yapısını ve stillerini JavaScript gibi diller aracılığıyla manipüle etmeye olanak tanır.

6. Event Propagation nedir?

  • Event propagation, bir DOM elementinde bir olayın (event) tetiklenmesi ve bu olayın DOM ağacındaki diğer elementlere yayılması sürecidir. Bu süreç iki faza ayrılır: capturing ve bubbling.

7. Event Bubbling nedir?

  • Event bubbling, bir olayın en derin noktadan başlayarak DOM ağacındaki üst elementlere doğru “kabarcıklanması” anlamına gelir. Yani, bir alt elementte bir olay tetiklendiğinde, bu olay üst elementlere doğru yayılır.
				
					// Event Bubbling örneği
document.querySelector('#child').addEventListener('click', function() {
  console.log('Çocuk elemente tıklandı.');
});
document.querySelector('#parent').addEventListener('click', function() {
  console.log('Ebeveyn elemente tıklandı.');
});

				
			

8. Event Capturing nedir?

  • Event capturing, bir olayın DOM ağacındaki en üst elementten başlayarak hedef elemente doğru “yakalanması” anlamına gelir. Bu, olayın yayılma sürecinin ilk fazıdır.
				
					// Event Capturing örneği
document.querySelector('#parent').addEventListener('click', function() {
  console.log('Ebeveyn elemente tıklandı.');
}, true); // true, event listener'ın capturing fazında çalıştığını belirtir.

				
			

9. event.preventDefault() ve event.stopPropagation() metodları arasındaki fark nedir?

  • event.preventDefault(), olayın varsayılan işlevini engeller. Örneğin, bir formun gönderilmesi veya bir linkin takip edilmesi gibi.
  • event.stopPropagation(), olayın başka elementlere yayılmasını (propagation) engeller, yani bubbling veya capturing fazlarını durdurur.
				
					document.querySelector('#link').addEventListener('click', function(event) {
  event.preventDefault(); // Link takip edilmeyecek
  event.stopPropagation(); // Olay başka elementlere yayılmayacak
});

				
			

10. event.preventDefault() metodunun bir elementte kullanılıp kullanılmadığını nasıl anlarız?

  • Bir olay nesnesi üzerinde event.defaultPrevented özelliği, preventDefault() metodunun çağrılıp çağrılmadığını kontrol etmek için kullanılabilir. Bu özellik, preventDefault() çağrıldıysa true değerini döndürür.
				
					document.querySelector('#form').addEventListener('submit', function(event) {
  event.preventDefault();
  if (event.defaultPrevented) {
    console.log('Form gönderimi engellendi.');
  }
});

				
			

11. obj.someprop.x kodu neden hata verir?

  • Eğer obj nesnesinin someprop adında bir özelliği yoksa veya someprop null veya undefined ise, someprop.x ifadesine erişmeye çalışmak bir TypeError hatası verir, çünkü null veya undefined üzerinde herhangi bir özellik tanımlı değildir.
				
					let obj = {};
console.log(obj.someprop.x); // TypeError: Cannot read property 'x' of undefined

				
			

12. event.target nedir?

  • event.target, olayın gerçekleştiği en derin elementi referans alır. Yani kullanıcının tıkladığı veya etkileşimde bulunduğu DOM elementini gösterir.
				
					document.querySelector('#button').addEventListener('click', function(event) {
  console.log(event.target); // Tıklanan butonun DOM elementini gösterir
});

				
			

13. event.currentTarget nedir?

  • event.currentTarget, olay dinleyicisinin (event listener) bağlı olduğu elementi referans alır. event.target ile event.currentTarget arasındaki fark, event.target‘ın olayın başladığı yer olduğu, event.currentTarget‘ın ise olay dinleyicisinin bağlı olduğu yer olduğudur.
				
					document.querySelector('#parent').addEventListener('click', function(event) {
  console.log(event.currentTarget); // Olay dinleyicisinin bağlı olduğu element
});

				
			

14. == ve === arasındaki fark nedir?

  • == eşitlik operatörü, iki değerin eşit olup olmadığını kontrol ederken, tür dönüşümü yapar (type coercion).
  • === kesin eşitlik operatörü veya üçlü eşitlik operatörü, hem değerlerin hem de türlerinin eşit olup olmadığını kontrol eder, tür dönüşümü yapmaz.
				
					console.log( 'Code is Poetry' );console.log('123' == 123); // true, tür dönüşümü yapılır
console.log('123' === 123); // false, türler farklı olduğu için

				
			

15. JavaScript’te iki benzer nesneyi karşılaştırdığımızda neden false döner?

  • JavaScript’te nesneler referans tipidir. Yani, iki nesnenin yapısal olarak benzer olması onların aynı referansa sahip olduğu anlamına gelmez. Eğer iki nesne aynı bellek adresine işaret etmiyorsa, bunlar farklı olarak kabul edilir.
				
					let obj1 = { name: 'obj' };
let obj2 = { name: 'obj' };
console.log(obj1 === obj2); // false, çünkü obj1 ve obj2 farklı referanslara sahip

				
			

16 !! operatörü ne işe yarar?

  • !! operatörü, herhangi bir değeri önce boolean’a çevirir (! ile), sonra tekrar tersine çevirir. Böylece, bir değerin “truthy” veya “falsy” olduğunu kontrol etmek için kullanılır.
				
					let truthyValue = 'Merhaba!';
let falsyValue = 0;
console.log(!!truthyValue); // true
console.log(!!falsyValue); // false
				
			

17. Bir satırda birden fazla ifadeyi nasıl değerlendiririz?

  • Virgül operatörü (,) kullanarak bir satırda birden fazla ifadeyi değerlendirebiliriz. Bu ifadeler soldan sağa doğru değerlendirilir ve son ifadenin değeri döndürülür.
				
					let a, b, c;
a = 5, b = 6, c = a + b;
console.log(c); // 11

				
			

18. Hoisting nedir?

  • Hoisting, JavaScript’te değişken ve fonksiyon bildirimlerinin kodun en üstüne “çekilmesi” anlamına gelir. Bu sayede, bir değişken veya fonksiyon tanımlanmadan önce kullanılabilir.
				
					console.log(x); // undefined, çünkü hoisting yüzünden x tanımlanmış ama değer atanmamış
var x = 5;

				
			

19. Scope nedir?

  • Scope, bir değişkenin veya fonksiyonun erişilebilir olduğu kod bölümünü ifade eder. JavaScript’te iki tür scope vardır: Global Scope ve Local Scope (Fonksiyon Scope ve Blok Scope dahil).

20. Closures nedir?

  • Closure, bir fonksiyonun kendi kapsamındaki değişkenlere, dış kapsamdaki değişkenlere ve parametrelere erişebilme yeteneğidir, hatta fonksiyon dış kapsamdan çıktıktan sonra bile. Bu, JavaScript’te veri gizleme ve enkapsülasyon sağlamak için kullanılır.
				
					function disFonksiyon() {
  let disDegisken = 'Merhaba';
  function icFonksiyon() {
    console.log(disDegisken); // 'Merhaba', dış fonksiyonun değişkenine erişebilir
  }
  return icFonksiyon;
}

let ornekClosure = disFonksiyon();
ornekClosure(); // 'Merhaba'

				
			

21. JavaScript’te “falsy” değerler nelerdir?

  • JavaScript’te “falsy” olarak değerlendirilen değerler şunlardır:
    • false
    • 0 ve -0
    • "" (boş string)
    • null
    • undefined
    • NaN (Not a Number)

22. Bir değerin “falsy” olup olmadığını nasıl kontrol ederiz?

  • Bir değerin “falsy” olup olmadığını kontrol etmek için ifadeyi bir boolean’a dönüştürebiliriz. Örneğin, Boolean(değer) kullanarak veya !!değer ile kontrol edebiliriz.
				
					if (!değer) {
  console.log('Bu değer falsy bir değerdir.');
}

				
			

23.”use strict” ne işe yarar?

  • “use strict” ifadesi, kodun “strict mode”da çalıştırılmasını sağlar. Bu mod, bazı hataları yakalamayı kolaylaştırır ve daha az hata yapmaya yatkın bir kod yazmanıza yardımcı olur. Örneğin, tanımlanmamış bir değişkene değer atamayı engeller.
				
					"use strict";
x = 3.14; // Hata verir, çünkü x tanımlanmamış

				
			

24.JavaScript’te this değeri nedir?

  • this, fonksiyonun çağrıldığı bağlama (context) göre değişen bir anahtar kelime. Global bağlamda this, global nesneyi (tarayıcılarda window), fonksiyon bağlamında ise o fonksiyonun ait olduğu nesneyi gösterir.
				
					console.log(this); // Global bağlamda 'window' nesnesini gösterir

function gösterThis() {
  console.log(this);
}
gösterThis(); // Fonksiyon bağlamında 'window' nesnesini gösterir

let nesne = {
  gösterThis: function() {
    console.log(this);
  }
};
nesne.gösterThis(); // Nesne bağlamında 'nesne'yi gösterir

				
			

25.Bir nesnenin prototipi nedir?

  • Bir nesnenin prototipi, o nesnenin miras aldığı özelliklerin ve metodların tanımlandığı başka bir nesnedir. JavaScript’te her nesne, başka bir nesnenin prototipini referans alarak oluşturulur ve bu prototip üzerinden özellik ve metodları miras alır.
				
					let nesne = new Object();
console.log(nesne.__proto__ === Object.prototype); // true

				
			

26. IIFE nedir, ne işe yarar?

  • IIFE (Immediately Invoked Function Expression), tanımlandığı anda çalıştırılan fonksiyon ifadeleridir. Genellikle, bir kod bloğunu kendi kapsamında izole etmek için kullanılır.
				
					(function() {
  let gizli = 'Gizli Değer';
  console.log('IIFE içinde:', gizli);
})();
// console.log(gizli); // Hata verir, gizli değişkenine dışarıdan erişilemez

				
			

27. Function.prototype.apply metodunun kullanımı nedir?

  • apply metodu, belirli bir this bağlamı ve argümanlar listesi (dizi şeklinde) ile bir fonksiyonu çağırmak için kullanılır.
				
					function topla(a, b) {
  return a + b;
}
console.log(topla.apply(null, [1, 2])); // 3

				
			

28. Function.prototype.call metodunun kullanımı nedir?

  • call metodu, belirli bir this bağlamı ve virgülle ayrılmış argümanlar ile bir fonksiyonu çağırmak için kullanılır.
				
					function topla(a, b) {
  return a + b;
}
console.log(topla.call(null, 1, 2)); // 3

				
			

29. Function.prototype.apply ve Function.prototype.call arasındaki fark nedir?

  • Her iki metod da bir fonksiyonu belirli bir this bağlamı ile çağırmak için kullanılır. Fark, apply‘ın argümanları bir dizi olarak alması, call‘un ise argümanları ayrı ayrı almasıdır.

30. Function.prototype.bind kullanımı nedir?

  • bind metodu, bir fonksiyonun this değerini kalıcı olarak bağlamak için kullanılır. Bu, özellikle olay işleyicileri ve zamanlayıcılar ile çalışırken yararlıdır.
				
					let nesne = {
  sayi: 37,
  gösterSayi: function() {
    console.log(this.sayi);
  }
};

setTimeout(nesne.gösterSayi, 1000); // undefined gösterir, çünkü 'this' bağlamı kaybolur
setTimeout(nesne.gösterSayi.bind(nesne), 1000); // 37 gösterir, çünkü 'this' nesne olarak bağlanmıştır

				
			

31. Fonksiyonel Programlama nedir ve JavaScript’i fonksiyonel bir dil adayı yapan özellikler nelerdir?

  • Fonksiyonel programlama, hesaplamaları matematiksel fonksiyonların değerlendirmesi olarak yorumlayan ve yan etkilerden kaçınmayı hedefleyen bir programlama paradigmasıdır. JavaScript’in fonksiyonel bir dil olarak kabul edilmesini sağlayan özellikler arasında birinci sınıf fonksiyonlar, yüksek mertebeden fonksiyonlar, kapanışlar (closures), ve anonim fonksiyonlar bulunur.

32. Yüksek Mertebeden Fonksiyonlar (Higher Order Functions) nedir?

  • Yüksek mertebeden fonksiyonlar, diğer fonksiyonları argüman olarak alabilen veya bir fonksiyon döndürebilen fonksiyonlardır. JavaScript’teki map, filter, reduce gibi array metodları buna örnektir.

33. Fonksiyonlar neden Birinci Sınıf Nesneler olarak adlandırılır?

  • JavaScript’te fonksiyonlar birinci sınıf nesnelerdir çünkü fonksiyonlar da diğer nesneler gibi değişkenlere atanabilir, fonksiyon argümanları olarak geçirilebilir, fonksiyonlardan döndürülebilir ve özelliklere sahip olabilirler.

34. Array.prototype.map metodunu el ile nasıl uygularız?

				
					Array.prototype.myMap = function(callback) {
  var arr = []; // yeni bir array oluştur
  for (var i = 0; i < this.length; i++) {
    arr.push(callback(this[i], i, this)); // callback fonksiyonunu uygula ve sonuçları yeni array'e ekle
  }
  return arr; // yeni array'i döndür
};

var numbers = [1, 4, 9];
var roots = numbers.myMap(Math.sqrt);
console.log(roots); // [1, 2, 3]

				
			

35. Array.prototype.filter metodunu el ile nasıl uygularız?

				
					Array.prototype.myFilter = function(callback, context) {
  var arr = [];
  for (var i = 0; i < this.length; i++) {
    if (callback.call(context, this[i], i, this)) {
      arr.push(this[i]);
    }
  }
  return arr;
};

var numbers = [1, 4, 9, 16];
var evens = numbers.myFilter(function(num) {
  return num % 2 === 0;
});
console.log(evens); // [4, 16]

				
			

36. Array.prototype.reduce metodunu el ile nasıl uygularız?

				
					Array.prototype.myReduce = function(callback, initialValue) {
  var accumulator = initialValue === undefined ? undefined : initialValue;
  for (var i = 0; i < this.length; i++) {
    if (accumulator !== undefined) {
      accumulator = callback.call(undefined, accumulator, this[i], i, this);
    } else {
      accumulator = this[i];
    }
  }
  return accumulator;
};

var numbers = [1, 2, 3, 4];
var sum = numbers.myReduce(function(a, b) {
  return a + b;
}, 0);
console.log(sum); // 10

				
			

37. arguments nesnesi nedir?

  • arguments nesnesi, fonksiyonlara geçirilen argümanların bir dizi benzeri nesnesidir. arguments nesnesi sayesinde fonksiyonlara kaç argüman geçirildiğini ve bu argümanların ne olduğunu görebiliriz.
				
					function myFunction() {
  for(var i = 0; i < arguments.length; i++) {
    console.log(arguments[i]);
  }
}
myFunction(1, 'a', true); // 1, 'a', true

				
			

38. Prototipsiz bir nesne nasıl oluşturulur?

  • Object.create(null) kullanarak prototipsiz bir nesne oluşturabiliriz. Bu nesne, Object.prototype‘dan hiçbir özellik veya metod miras almaz.
				
					var obj = Object.create(null);
console.log(obj.toString); // undefined, çünkü 'toString' obj'nin bir özelliği değil

				
			

39. Bu kodda b neden global bir değişken oluyor?

  • Eğer bir fonksiyon içinde var, let veya const kullanmadan bir değişken ataması yapılırsa, bu değişken otomatik olarak global bir değişken olur.
				
					function myFunction() {
  b = 2; // 'var', 'let', 'const' kullanılmadı, bu yüzden 'b' global bir değişken olur
}
myFunction();
console.log(b); // 2

				
			

40. ECMAScript nedir?

  • ECMAScript, JavaScript’in standardını belirleyen bir dizi spesifikasyondur. JavaScript, ECMAScript spesifikasyonuna göre uygulanan bir dildir ve bu spesifikasyon, dilin nasıl davranması gerektiğini tanımlar.

41. ES6 veya ECMAScript 2015’te yeni özellikler nelerdir?

  • let ve const ile blok kapsamı değişkenleri
  • Ok fonksiyonları (Arrow functions)
  • Sınıflar (Classes)
  • Şablon dizileri (Template literals)
  • Varsayılan parametreler
  • Rest ve Spread operatörleri (...)
  • Destructuring atama
  • Modüller (import/export)
  • Map, Set, WeakMap, ve WeakSet gibi yeni veri yapıları
  • Sözler (Promises) ile asenkron işlemler
  • İteratörler ve for-of döngüsü
  • Yeni metotlar ve özellikler (String, Array, Object, Number, Math)
  • Semboller (Symbols)
  • Tail Call Optimizasyonu (bazı JavaScript motorlarında)

42. var, let ve const anahtar kelimeleri arasındaki fark nedir?

  • var: Fonksiyon kapsamında değişken tanımlar, ve hoisting olur.
  • let: Blok kapsamında değişken tanımlar, ve hoisting olmaz.
  • const: Blok kapsamında sabit tanımlar. Değer atandıktan sonra değiştirilemez.

43. Ok fonksiyonları (Arrow functions) nedir?

  • Ok fonksiyonları, daha kısa sözdizimi olan ve kendi this değerlerini bağlamayan fonksiyonlardır.
				
					const topla = (a, b) => a + b;

				
			

44. Sınıflar (Classes) nedir?

  • Sınıflar, prototip tabanlı mirasın daha açık ve daha kolay bir sözdizimi ile kullanılmasını sağlayan bir JavaScript özelliğidir.
				
					class Hayvan {
  constructor(ad) {
    this.ad = ad;
  }
  sesCikar() {
    console.log('Ses yok!');
  }
}

				
			

45. Şablon dizileri (Template literals) nedir?

  • Şablon dizileri, çok satırlı diziler ve ifade gömme özellikleri sağlayan string literallerdir.
				
					let ad = 'Dünya';
console.log(`Merhaba ${ad}!`);

				
			

46. Nesne Destructuring nedir?

  • Destructuring atama, bir nesnenin özelliklerini veya bir dizinin elemanlarını değişkenlere “unpack” etmek için kullanılır.
				
					let {a, b} = {a: 1, b: 2};
console.log(a); // 1
console.log(b); // 2

				
			

47. ES6 Modülleri nedir?

  • ES6 modülleri, JavaScript kodunu modüler dosyalara ayırmanın ve import ve export ifadeleri ile bu dosyalar arasında paylaşmanın bir yoludur.
				
					// lib.js
export function topla(a, b) {
  return a + b;
}

// app.js
import { topla } from './lib.js';
console.log(topla(1, 2)); // 3

				
			

48. Set nesnesi nedir ve nasıl çalışır?

  • Set nesnesi, benzersiz değerler koleksiyonunu saklamak için kullanılır. Bir değer Set içinde yalnızca bir kez bulunabilir.
				
					let sayilar = new Set([1, 2, 3, 4, 4, 4]);
console.log(sayilar); // Set {1, 2, 3, 4}

				
			

49. Callback fonksiyon nedir?

  • Bir callback fonksiyonu, başka bir fonksiyona argüman olarak geçirilen ve o fonksiyon tarafından geri çağrılan fonksiyondur. Genellikle asenkron işlemlerde kullanılır.
				
					function islemYap(data, callback) {
  console.log('İşlem yapılıyor...');
  callback(data);
}

islemYap('Veri', function(result) {
  console.log('Callback çağrıldı:', result);
});

				
			

50. Sözler (Promises) nedir?

  • Promise, asenkron işlemlerin sonuçlarını temsil eder. Bir Promise, bekleyen (pending), yerine getirilmiş (fulfilled) veya reddedilmiş (rejected) olabilir.
				
					let soz = new Promise(function(resolve, reject) {
  // Asenkron işlem burada yapılır ve sonuçta resolve veya reject çağrılır
  resolve('İşlem başarılı!');
});

soz.then(function(result) {
  console.log(result); // 'İşlem başarılı!'
});

				
			

51. async/await nedir ve nasıl çalışır?

  • async/await, JavaScript’te asenkron işlemleri daha okunabilir ve senkron işlemlermiş gibi yazmamızı sağlayan bir özelliktir. async anahtar kelimesi bir fonksiyonu asenkron fonksiyon yapar ve await anahtar kelimesi, bir Promise‘in sonucunu beklemek için kullanılır.
				
					async function veriAl() {
  let veri = await fetch('url'); // fetch dönen Promise'i bekler
  let sonuc = await veri.json(); // response.json() dönen Promise'i bekler
  return sonuc;
}

				
			

52. Spread operatörü ile Rest operatörü arasındaki fark nedir?

  • Spread operatörü (...), bir dizi veya nesnenin elemanlarını tek tek elemanlar halinde genişletmek için kullanılır. Rest operatörü ise, bir fonksiyonun alacağı çok sayıda argümanı bir dizi olarak toplamak için kullanılır.
				
					// Spread örneği
let sayilar = [1, 2, 3];
let yeniDizi = [...sayilar, 4, 5]; // [1, 2, 3, 4, 5]

// Rest örneği
function topla(...args) {
  return args.reduce((acc, current) => acc + current, 0);
}
topla(1, 2, 3); // 6

				
			

53. Varsayılan Parametreler nedir?

  • Varsayılan parametreler, bir fonksiyona argüman olarak bir değer geçirilmediğinde kullanılacak olan değerlerdir.
				
					function selamla(isim = 'Dünya') {
  console.log(`Merhaba, ${isim}!`);
}
selamla(); // "Merhaba, Dünya!"
selamla('Arkadaş'); // "Merhaba, Arkadaş!"

				
			

54. Wrapper Nesneler nedir?

  • JavaScript’te, primitif tipler (string, number, boolean, null, undefined, symbol) için otomatik olarak wrapper nesneler oluşturulur. Bu, primitif tiplere sanki nesneymiş gibi özellik ve metodlar eklememizi sağlar.
				
					let str = "Merhaba";
console.log(str.length); // 7
console.log(str.toUpperCase()); // "MERHABA"

				
			
  1. İmplisit ve Explisit Tür Dönüşümü arasındaki fark nedir?
    • İmplisit tür dönüşümü, JavaScript motoru tarafından otomatik olarak yapılan tür dönüşümüdür. Explisit tür dönüşümü ise, geliştiricinin kodda açıkça yaptığı tür dönüşümüdür.
				
					// İmplisit dönüşüm
let sayi = '5' + 2; // "52"

// Explisit dönüşüm
let sayi = parseInt('5') + 2; // 7

				
			

56. NaN nedir ve bir değerin NaN olup olmadığını nasıl kontrol ederiz?

  • NaN (“Not a Number”), sayısal olmayan bir işlem sonucu ortaya çıkan özel bir değerdir. Bir değerin NaN olup olmadığını kontrol etmek için isNaN() fonksiyonu kullanılır.
				
					let sonuc = 0 / 0; // NaN
console.log(isNaN(sonuc)); // true

				
			

57. Bir değerin dizi olup olmadığını nasıl kontrol ederiz?

  • Bir değerin dizi olup olmadığını Array.isArray() metodu ile kontrol edebiliriz.
				
					let diziMi = [1, 2, 3];
console.log(Array.isArray(diziMi)); // true

				
			
  1. Bir sayının çift olup olmadığını % veya modulo operatörü kullanmadan nasıl kontrol ederiz?
    • Bir sayının çift olup olmadığını, sayıyı 2 ile çarptığımızda ve sonra 2 ile bölüp orijinal sayıya eşit olup olmadığını kontrol ederek bulabiliriz.
				
					function ciftMi(sayi) {
  return (sayi / 2) * 2 === sayi;
}
console.log(ciftMi(10)); // true
console.log(ciftMi(11)); // false

				
			

59. Bir nesnede belirli bir özelliğin olup olmadığını nasıl kontrol ederiz?

  • Bir nesnede belirli bir özelliğin olup olmadığını in operatörü veya hasOwnProperty() metodu ile kontrol edebiliriz.
				
					let nesne = { a: 1, b: 2 };
console.log('a' in nesne); // true
console.log(nesne.hasOwnProperty('b')); // true

				
			

60. AJAX nedir?

  • AJAX (“Asynchronous JavaScript and XML”), web sayfalarının arka planda sunucu ile veri alışverişi yapmasını sağlayan bir tekniktir. Bu, sayfanın yeniden yüklenmesine gerek kalmadan içeriğin güncellenmesine olanak tanır. AJAX genellikle XMLHttpRequest veya fetch API kullanılarak gerçekleştirilir.
				
					let xhr = new XMLHttpRequest();
xhr.open('GET', 'dosya.txt', true);
xhr.onreadystatechange = function() {
  if (xhr.readyState == 4 && xhr.status == 200) {
    console.log(xhr.responseText);
  }
};
xhr.send();

				
			

61. JavaScript’te nesne oluşturmanın yolları nelerdir?

  • Nesne literal kullanımı: let nesne = {};
  • Yapıcı fonksiyon kullanımı: let nesne = new Object();
  • Object.create() metodu ile: let nesne = Object.create(prototypeObj);
  • Sınıf (class) kullanımı: class Sinif {}; let nesne = new Sinif();
  • Fonksiyon konstrüktörleri kullanımı: function Fonksiyon() {}; let nesne = new Fonksiyon();

62. Object.seal ve Object.freeze metodları arasındaki fark nedir?

  • Object.seal: Bir nesneyi “mühürler” ve yeni özellikler eklenmesini önler, mevcut özelliklerin silinmesini engeller ama mevcut özelliklerin değerlerini değiştirmeye izin verir.
  • Object.freeze: Bir nesneyi “dondurur” ve yeni özellikler eklenmesini, mevcut özelliklerin silinmesini veya değiştirilmesini önler.

63. Nesnelerde in operatörü ile hasOwnProperty metodu arasındaki fark nedir?

  • in operatörü, belirtilen özelliğin nesnede veya nesnenin prototip zincirinde olup olmadığını kontrol eder.
  • hasOwnProperty metodu ise, özelliğin nesnenin kendisine ait olup olmadığını kontrol eder ve prototip zincirini dikkate almaz.

64. JavaScript’te asenkron kod ile başa çıkmanın yolları nelerdir?

  • Callback fonksiyonlar: Asenkron işlemler için en temel yaklaşım.
  • Promises: Asenkron işlemleri temsil eden nesneler.
  • async/await: Promises ile çalışmayı daha okunabilir hale getiren sözdizimi.
  • Olay dinleyicileri (Event Listeners): Özellikle DOM olayları için kullanılır.
  • Asenkron jeneratörler ve yineleyiciler (Async Generators and Iterators).

65. Fonksiyon ifadesi (function expression) ile fonksiyon bildirimi (function declaration) arasındaki fark nedir?

  • Fonksiyon bildirimi, fonksiyonun adıyla birlikte tanımlanır ve hoisting olur, yani kodun üst kısımlarında da çağrılabilir.
  • Fonksiyon ifadesi, fonksiyonun bir değişkene atanmasıyla oluşturulur ve sadece tanımlandıktan sonra kullanılabilir.

66. Bir fonksiyon kaç farklı şekilde çağrılabilir?

  • Fonksiyon çağrısı: fonksiyon();
  • Metot çağrısı: nesne.metot();
  • Yapıcı çağrı: new Fonksiyon();
  • apply ve call kullanarak dolaylı çağrı: fonksiyon.call(context, arg1, arg2);
  • Olay işleyici olarak çağrı: <button onclick="fonksiyon()">Tıkla</button>

67. Memoization nedir ve ne işe yarar?

  • Memoization, bir fonksiyonun önceki çağrılarının sonuçlarını önbelleğe alarak, aynı hesaplamanın tekrar yapılmamasını sağlayan bir optimizasyon tekniğidir.

68. Memoization yardımcı fonksiyonunu nasıl uygularız?

				
					function memoize(fn) {
  const cache = {};
  return function(...args) {
    const key = args.toString();
    if (cache[key]) {
      return cache[key];
    } else {
      let result = fn.apply(this, args);
      cache[key] = result;
      return result;
    }
  };
}

// Örnek kullanım
const fibonacci = memoize((n) => {
  if (n < 2) {
    return n;
  }
  return fibonacci(n - 1) + fibonacci(n - 2);
});

				
			

69. typeof null neden “object” döndürür? Bir değerin null olup olmadığını nasıl kontrol ederiz?

  • Tarihsel bir JavaScript hatası nedeniyle, typeof null “object” döndürür. Bir değerin null olup olmadığını kontrol etmek için === operatörü kullanılır.
				
					let deger = null;
console.log(typeof deger === "object" && deger === null); // true

				
			
  1. new anahtar kelimesi ne işe yarar?
    • new anahtar kelimesi, bir yapıcı fonksiyonu kullanarak yeni bir nesne örneği oluşturur. Bu, fonksiyonun bir yapıcı olarak davranmasını ve this anahtar kelimesinin yeni oluşturulan nesneye bağlanmasını sağlar.
				
					function Kisi(ad) {
  this.ad = ad;
}

let kisi = new Kisi('Ahmet');
console.log(kisi.ad); // "Ahmet"

				
			
Facebook
Twitter
LinkedIn
Pinterest

Leave a Reply

Your email address will not be published. Required fields are marked *