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.
undefined
venull
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’teundefined
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) isetrue
değerini döndürür. Eğer operandlardan biri yanlış (falsy) isefalse
döndürür.
console.log(true && true); // true
console.log(true && false); // false
||
operatörü ne işe yarar?||
mantıksal VEYA operatörüdür. Operandlardan en az biri doğru (truthy) isetrue
değerini döndürür. İki operand da yanlış (falsy) isefalse
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ıysatrue
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
nesnesininsomeprop
adında bir özelliği yoksa veyasomeprop
null
veyaundefined
ise,someprop.x
ifadesine erişmeye çalışmak birTypeError
hatası verir, çünkünull
veyaundefined
ü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
ileevent.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ğlamdathis
, global nesneyi (tarayıcılardawindow
), 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 birthis
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 birthis
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 fonksiyonunthis
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
veyaconst
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
veconst
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
, veWeakSet
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
veexport
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ğerSet
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. BirPromise
, 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 veawait
anahtar kelimesi, birPromise
‘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"
- İ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ğerinNaN
olup olmadığını kontrol etmek içinisNaN()
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
- 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ü veyahasOwnProperty()
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
veyafetch
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
vecall
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ğerinnull
olup olmadığını kontrol etmek için===
operatörü kullanılır.
let deger = null;
console.log(typeof deger === "object" && deger === null); // true
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ı vethis
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"