Cara menyenangkan untuk mempelajari JavaScript untuk wawancara pengkodean frontend/web Anda. Semua pertanyaan dijawab di sini dalam teks dan juga memiliki video di saluran YouTube kami. Klik
Jangan ragu untuk menghubungi kami di platform sosial kami! ?
Perselisihan || Instagram || Twitter || Tiktok || Blog || Facebook
Mendukung
Harap ️ Bintang proyek ini dan bagikan dengan orang lain untuk menunjukkan dukungan Anda. Ikuti saya ❤️ untuk pembaruan tentang proyek dan tutorial mendatang!
Dasar -Dasar Bahasa - Array - Tanggal dan Waktu - JavaScript Berorientasi Objek - Modul - Lain -lain
console . log ( new Date ( 2023 , 1 , 31 ) )Tue Jan 31 2024Tue Jan 31 2023Fri Mar 03 2023ErrorDalam JavaScript, saat membangun tanggal menggunakan objek tanggal berbulan -bulan berbasis 0. Yang berarti 0 adalah untuk Januari dan 1 adalah untuk Februari.
Jadi, dalam hal ini kami meminta JavaScript untuk menetapkan tanggal 2023 31 Februari yang tidak ada.
Tetapi alih -alih melempar kesalahan, JavaScript akan meluap ke bulan berikutnya yang merupakan bulan Maret.
Dan sejak Februari tahun 2023 hanya memiliki 28 hari, kode ini akan meluap dengan 3 hari menjadikan hasilnya menjadi 3 Maret 2023.
var username = 'kirandash'
var username = 'bgwebagency'
console . log ( username )bgwebagencykirandashReferenceErrorSyntaxError Kami dapat mendeklarasikan variabel yang sama beberapa kali menggunakan kata kunci var . Dan variabel akan menahan nilai yang ditetapkan pada akhirnya.
Tetapi kami tidak dapat mendeklarasikan variabel yang sama beberapa kali menggunakan let atau const
const user = {
username : 'kirandash' ,
updateUsername : newName => {
this . username = newName
} ,
}
user . updateUsername ( 'bgwebagency' )
console . log ( user . username )bgwebagencyReferenceErrorkirandashundefined Karena fungsi updateUsername tidak berfungsi dengan baik dan gagal memperbarui username user .
Fungsi updateUsername dalam object pengguna adalah fungsi panah, dan tidak terikat pada objek user .
Jadi, kata kunci this di dalam fungsi UpdateUserName tidak mengacu pada objek user , tetapi mengacu pada ruang lingkup global.
Untuk memperbaiki masalah ini, kita harus mengubah fungsi panah ke fungsi normal.
const len1 = 'kiran' . length
const len2 = '?' . length
console . log ( len1 , len2 )5, 25, 15, undefined5, SyntaxErrorDalam JavaScript, properti panjang string mengembalikan jumlah byte dan bukan jumlah karakter seperti yang kita harapkan.
Emoji adalah karakter unicode yang dikodekan dalam dua byte. Oleh karena itu jawabannya adalah 2 untuk pertanyaan ini.
Panjang string untuk kiran mengembalikan 5 karena dalam string masing -masing karakter adalah 1 byte.
console . log ( undefined == null , undefined === null )true, truetrue, falsefalse, falsefalse, truePertama, izinkan saya menjelaskan perbedaan antara operator yang sama dan ketat.
Operator yang sama hanya memeriksa apakah kedua nilainya sama. Operator yang sama ketat memeriksa apakah nilai dan jenisnya sama.
Jadi dalam kode ini, pernyataan pertama undefined == null mengembalikan true karena baik undefined dan null memiliki nilai yang sama yang kosong.
Tetapi pernyataan kedua undefined === null mengembalikan false . Karena typeof undefined undefined , sedangkan typeof null adalah object .
Anda mungkin bertanya -tanya, mengapa typeof null adalah object ketika null pada dasarnya adalah tipe data primitif. Ini pada dasarnya adalah kesalahan dalam JavaScript sejak awal.
Sekarang, satu tip lagi untuk Anda: ketika Anda ingin menetapkan nilai kosong untuk variabel menggunakan null , bukan undefined . Karena undefined terutama digunakan untuk memeriksa apakah suatu variabel tidak memiliki nilai yang ditetapkan untuk itu.
function getFruits ( x , ... multi , y ) {
console . log ( x , y , multi ) ;
}
getFruits ( "?" , "?" , "?" , "?" , "?" )? ? ["?", "?", "?"]SyntaxErrorOperator istirahat ditambahkan sebagai bagian dari fitur ES6.
Dibutuhkan semua argumen yang diteruskan ke suatu fungsi dan menempatkannya dalam array.
Jika beberapa argumen diteruskan ke suatu fungsi maka operator istirahat harus datang pada akhirnya. Itulah mengapa cuplikan kode ini akan melakukan kesalahan.
Untuk memperbaiki masalah ini, silakan pindahkan operator istirahat ke akhir dan kemudian harus berhasil.
let x = Number . NEGATIVE_INFINITY
let y = Number . POSITIVE_INFINITY
let z = x + y
console . log ( z )0undefinedNaNTypeErrorNegatif_infinity dan positif_infinity adalah sifat objek angka dalam JavaScript yang mewakili konsep matematika dari infinity negatif dan infinity positif.
Saat Anda menambahkan number.negative_infinity dan number.positive_infinity, hasilnya adalah nan.
Menambahkan nilai tak terbatas positif ke nilai tak terbatas negatif tidak menghasilkan nilai numerik yang bermakna.
Jadi dalam hal ini, Z akan menjadi Nan.
Perhatikan bahwa kode tidak akan melempar tipeError, karena JavaScript dapat melakukan operasi penambahan antara number.negative_infinity dan number.positive_infinity.
console . log ( 'BG Web Agency' === NaN , isNaN ( 'BG Web Agency' ) )true, truefalse, truetrue, falsefalse, false Menggunakan === NaN untuk memeriksa apakah nilai adalah angka tidak akan berfungsi.
Dalam JavaScript, NaN (bukan angka) adalah nilai khusus yang mewakili angka yang tidak valid.
NAN tidak sama dengan apa pun, termasuk dirinya sendiri, jadi ungkapan "BG Web Agency" === NaN akan selalu mengembalikan false .
Untuk memeriksa apakah nilai adalah angka dalam JavaScript, Anda dapat menggunakan fungsi isNaN() . Fungsi ini mengembalikan true jika argumen yang diteruskan ke sana adalah NaN , atau jika tidak dapat dikonversi ke angka.
console . log ( isFinite ( Infinity ) , isNaN ( Infinity ) )false, falsefalse, truetrue, falsefalse, false Fungsi isFinite() digunakan untuk menentukan apakah nilai yang diberikan adalah angka yang terbatas.
Ini mengembalikan false jika nilainya adalah Nan, Infinity, atau -infinity, dan benar jika nilainya adalah angka yang terbatas.
Jadi, dalam contoh ini isFinite(Infinity) akan mengembalikan false karena Infinity bukan angka yang terbatas.
Di sisi lain, fungsi isnan () digunakan untuk menentukan apakah nilai yang diberikan bukan angka (NAN).
Ini mengembalikan true jika nilainya NAN, dan salah jika nilainya adalah angka atau tipe data lainnya.
Jadi, dalam contoh ini isNaN(Infinity) juga akan mengembalikan False karena Infinity bukan Nan.
Oleh karena itu selalu gunakan fungsi isFinite sebagai ganti fungsi isNaN saat Anda ingin memvalidasi jika angka terbatas
const user = {
name : 'John' ,
age : 30 ,
getName : ( ) => {
return this . name
} ,
getAge : function ( ) {
return this . age
} ,
}
const getName = user . getName
const getAge = user . getAge
console . log ( getName ( ) )
console . log ( getAge ( ) ) Fungsi getName Arrow menggunakan kata kunci this untuk merujuk ke properti nama objek, tetapi karena fungsi panah memiliki ikatan leksikal this , nilai kata kunci this di dalam fungsi panah akan menjadi objek global yang merupakan window di browser, atau global di node.js.
Karena tidak ada properti nama pada objek global , fungsi mengembalikan undefined .
Fungsi getAge menggunakan ekspresi fungsi reguler dan dengan benar mengacu pada properti usia objek user menggunakan kata kunci this .
Tetapi ketika getAge ditugaskan ke variabel getAge , ia kehilangan referensi ke objek user , jadi ketika fungsi dipanggil menggunakan getAge() , ini akan merujuk ke objek global lagi, dan karena tidak ada properti usia pada objek global, fungsi mengembalikan tidak terdefinisi.
for ( var i = 0 ; i < 3 ; i ++ ) {
setTimeout ( function ( ) {
console . log ( i )
} , 0 )
}Penutupan adalah fungsi yang mempertahankan akses ke variabel dalam ruang lingkup luarnya, bahkan setelah fungsi luar kembali.
Dalam contoh ini, jawabannya adalah B, karena fungsi SetTimeout tidak sinkron dan tidak segera dijalankan.
Pada saat fungsi panggilan balik yang disahkan ke SetTimeout dijalankan, loop telah selesai dan variabel I memiliki nilai 3.
Oleh karena itu, setiap panggilan ke console.log (i) di dalam fungsi callback akan mencetak 3.
Untuk menyelesaikan masalah ini dan mencetak 0, 1, 2, kita dapat menggunakan IIFE (segera memohon ekspresi fungsi) untuk membuat ruang lingkup baru untuk setiap iterasi loop.
Ini menciptakan variabel baru di setiap IIFE, dengan salinannya sendiri dari nilai saya saat ini pada iterasi loop.
Ketika fungsi callback diteruskan ke SetTimeout dijalankan, ia memiliki akses ke variabel J dalam penutupannya, yang memiliki nilai yang diharapkan dari 0, 1, atau 2 untuk setiap iterasi loop.
function add ( x ) {
return function ( y ) {
if ( y !== undefined ) {
x += y
return arguments . callee
} else {
return x
}
}
}
console . log ( add ( 1 ) ( 2 ) ( 3 ) ( ) )Jawaban yang benar adalah A. Kode mendefinisikan fungsi tambah yang mengambil satu argumen x dan mengembalikan fungsi lain yang mengambil satu argumen y.
Fungsi dalam ini memeriksa jika Y didefinisikan. Jika didefinisikan, itu menambahkan y ke x dan mengembalikan referensi untuk dirinya sendiri menggunakan argumen. Properti Callee, yang memungkinkan fungsi disebut secara rekursif dengan argumen berikutnya.
Jika y tidak didefinisikan, ia mengembalikan nilai x saat ini.
Kemudian, kode panggilan tambahkan (1) (2) (3) (). Panggilan pertama ini menambahkan (1) dengan 1 sebagai argumennya, yang mengembalikan fungsi yang mengambil satu argumen y.
Kemudian, ia menyebut fungsi ini dengan 2 sebagai argumennya, yang menambahkan 2 ke 1 dan mengembalikan referensi ke fungsi.
Akhirnya, ia menyebut fungsi ini dengan 3 sebagai argumennya, yang menambahkan 3 hingga 3 dan mengembalikan referensi ke fungsi.
Karena tidak ada argumen yang dilewati dalam panggilan terakhir, ia mengembalikan nilai x saat ini, yaitu 6.
Kode ini menunjukkan contoh yang lebih kompleks dari kari di JavaScript, di mana fungsi kari mengembalikan referensi untuk dirinya sendiri, yang memungkinkannya disebut secara rekursif dengan argumen berikutnya.
function multiply ( x ) {
return function ( y ) {
return x * y
}
}
const double = multiply ( 2 )
console . log ( double ( 5 ) )Jawaban yang benar adalah B. Kode mendefinisikan fungsi multiply yang mengambil argumen tunggal x dan mengembalikan fungsi lain yang mengambil satu argumen y. Fungsi dalam ini melipatgandakan x dan y dan mengembalikan hasilnya.
Kemudian, kode membuat fungsi baru ganda dengan memanggil Multiply dengan 2 sebagai argumennya. Fungsi ganda sekarang merupakan fungsi kari yang dapat dipanggil dengan argumen tunggal untuk menggandakan nilainya.
Akhirnya, kode memanggil dua kali lipat dengan 5 sebagai argumennya, yang mengakibatkan 10 dicatat ke konsol.
Kode ini menunjukkan konsep kari dalam JavaScript, di mana fungsi mengembalikan fungsi lain yang dapat sebagian diterapkan dengan beberapa argumen.
Manakah dari pernyataan berikut yang benar tentang metode next() dari iterator di JavaScript?
Jawaban yang benar adalah A.
Dalam JavaScript, iterable adalah objek yang mendefinisikan urutan dan dapat diulangi menggunakan loop.
Iterator adalah objek yang tahu cara mengakses elemen -elemen yang dapat diulangi.
Objek iterable memiliki metode dengan Symbol.iterator kunci.iterator, yang mengembalikan objek iterator.
Objek Iterator memiliki metode next() , yang mengembalikan objek dengan dua properti: value , yang merupakan elemen berikutnya dalam urutan, dan done , yang merupakan boolean yang menunjukkan apakah iterator telah mencapai ujung urutan.
Iterable umumnya digunakan dalam banyak aplikasi real-time saat bekerja dengan set data besar, atau saat menerapkan struktur data khusus
function * counter ( ) {
let i = 0
while ( true ) {
yield i ++
}
}
const gen = counter ( )
console . log ( gen . next ( ) . value )
console . log ( gen . next ( ) . value )
console . log ( gen . next ( ) . value )Apa output cuplikan kode di atas?
Jawaban yang benar adalah D.
Fungsi counter adalah fungsi generator yang menciptakan loop tak terbatas yang menghasilkan nilai i .
Variabel gen diatur ke fungsi generator, dan setiap panggilan ke gen.next() mengembalikan objek dengan properti nilai yang ditetapkan ke nilai yang dihasilkan berikutnya.
Pernyataan console.log kemudian mencetak nilai yang dikembalikan oleh gen.next() .
Fungsi generator adalah jenis fungsi khusus yang dapat digunakan untuk mengontrol iterasi atas urutan nilai.
Tidak seperti fungsi tradisional, fungsi generator memungkinkan Anda untuk menjeda dan melanjutkan eksekusi, dan menghasilkan banyak nilai dari waktu ke waktu.
Manakah dari skenario berikut yang berpotensi menyebabkan kebocoran memori di JavaScript?
Referensi melingkar terjadi ketika dua atau lebih objek saling mereferensikan, membuat loop yang mencegah objek menjadi sampah dikumpulkan.
Ini dapat menyebabkan kebocoran memori jika objek tidak lagi diperlukan tetapi tidak dapat dibebaskan karena referensi melingkar.
Opsi A, C, dan D biasanya tidak menyebabkan kebocoran memori di JavaScript.
Pengumpulan sampah adalah proses membebaskan secara otomatis memori yang tidak lagi digunakan oleh suatu program.
Dalam JavaScript, algoritma tanda dan sapuan umumnya digunakan untuk pengumpulan sampah.
Algoritma ini bekerja dengan pertama -tama menandai semua objek dalam memori yang masih dirujuk oleh program, kemudian menyapu dan membebaskan memori apa pun yang tidak ditandai seperti digunakan.
function getData ( ) {
return new Promise ( ( resolve , reject ) => {
setTimeout ( ( ) => {
resolve ( 'Data retrieved successfully' )
} , 1000 )
} )
}
async function main ( ) {
try {
const data = await getData ( )
console . log ( data )
throw new Error ( 'Something went wrong' )
} catch ( err ) {
console . log ( 'Caught an error:' , err . message )
return 'Error occurred'
} finally {
console . log ( 'Finally block executed.' )
return 'Finally block value'
}
}
; ( async ( ) => {
console . log ( await main ( ) )
} ) ( )Apa output cuplikan kode di atas?
Ketika kode dijalankan, fungsi utama () dipanggil, yang merupakan fungsi async yang menggunakan menunggu untuk mendapatkan data dari fungsi getData() .
Setelah data diambil, pernyataan console.log(data) log "berhasil diambil" ke konsol.
Setelah itu, pernyataan throw new Error("Something went wrong") melempar kesalahan.
Blok catch menangkap kesalahan dan log "Caught an error: Something went wrong" ke konsol, dan kemudian mengembalikan string "Error occurred" .
Akhirnya, blok akhirnya dieksekusi dan log "Finally block executed." ke konsol, dan kemudian mengembalikan string "Finally block value" .
Ketika fungsi main() dipanggil, ia mengembalikan janji karena itu adalah fungsi async. Karena blok finally juga mengembalikan nilai, nilai itu akan menjadi nilai akhir yang diselesaikan dari janji.
Oleh karena itu, ketika console.log(main()) disebut, "Finally block executed." dan "Finally block value" akan dicatat ke konsol.
Coba, tangkap, dan akhirnya kata kunci yang digunakan dalam JavaScript untuk menangani kesalahan runtime.
const arr = [ 1 , 2 , 3 , 4 , 5 ] ;
let sum = 0 ;
for ( let num of arr ) {
sum += num ;
if ( sum >= 6 ) break ;
}
console . log ( sum ) ;
const arr2 = [ 1 , 2 , 3 , 4 , 5 ] ;
let sum2 = 0 ;
arr . forEach ( ( num ) => {
sum2 += num ;
if ( sum2 >= 6 ) break ;
} ) ;
console . log ( sum2 ) ;Apa output cuplikan kode di atas?
Karena pernyataan break tidak valid di dalam fungsi callback yang diteruskan ke forEach .
forEach tidak mendukung penghentian dini menggunakan pernyataan break . Oleh karena itu, kesalahan dilemparkan: "Uncaught SyntaxError: Illegal break statement".
Dalam hal untuk loop, pernyataan break diperbolehkan.
Untuk memperbaiki masalah, hapus pernyataan break dari foreach dan itu harus berhasil.
Secara umum, for of direkomendasikan for in atau forEach
let arr = [ 1 , 2 , 3 , 4 ]
let result = arr . push ( 5 )
console . log ( 'result: ' , result , 'arr: ' , arr )Apa output cuplikan kode di atas?
Metode array.push() dalam JavaScript menambahkan satu atau lebih elemen ke akhir array dan mengembalikan panjang baru dari array.
Dalam kode yang diberikan, arr adalah array dengan nilai [1, 2, 3, 4] . Metode push() dipanggil dengan argumen 5, yang menambahkan 5 ke akhir array arr .
Metode push() mengembalikan panjang baru array setelah penambahan elemen. Dalam hal ini, panjang ARR yang baru akan menjadi 5 karena 5 ditambahkan ke akhir array.
let arr = [ 3 , 5 , 7 , 9 ]
let result = arr . unshift ( 1 , 2 )
console . log ( 'result: ' , result , 'arr: ' , arr )Apa output cuplikan kode di atas?
Metode array.unshift() dalam JavaScript menambahkan satu atau lebih elemen ke awal array dan mengembalikan panjang array baru.
Dalam kode yang diberikan, arr adalah array dengan nilai [3, 5, 7, 9] . Metode unshift() dipanggil dengan argumen 1 dan 2, yang menambahkan 1 dan 2 pada awal array arr .
Metode unshift() mengembalikan panjang baru array setelah penambahan elemen. Dalam hal ini, panjang arr yang baru akan menjadi 6 karena 1 dan 2 ditambahkan ke awal array, menggeser elemen yang ada ke kanan.
const myArray = [ 1 , 2 , 3 , 4 , 5 ]
const poppedValue = myArray . pop ( )
console . log ( poppedValue )Apa output cuplikan kode di atas?
Metode Array.pop() dalam JavaScript menghapus elemen terakhir dari array dan mengembalikan elemen itu.
Dalam hal ini, myArray adalah array dengan elemen [1, 2, 3, 4, 5] , dan myArray.pop() dipanggil, yang menghapus elemen 5 dari array dan mengembalikannya.
const arr = [ 10 , 20 , 30 , 40 , 50 ]
const removedElement = arr . shift ( )
console . log ( 'removedElement: ' , removedElement , 'arr: ' , arr )Apa output cuplikan kode di atas?
Metode Array.shift() menghapus elemen pertama dari array arr , yaitu 10 , dan mengembalikannya. Array arr yang dihasilkan kemudian akan [20, 30, 40, 50] .
Jadi, Opsi A adalah jawaban yang benar karena mencerminkan nilai yang benar dari removedElement dan keadaan arr setelah Array.shift() yang diperbarui dipanggil. Opsi B tidak benar karena menyatakan bahwa removedElement adalah 50, yang tidak benar. Opsi C juga salah karena menyatakan bahwa arr tetap tidak berubah, yang tidak akurat. Opsi D sedikit membingungkan karena menyatakan bahwa Array.shift() mengembalikan array, yang tidak benar.
let arr = [ 1 , 2 , 3 , 4 , 5 ]
let removed = arr . splice ( 1 , 2 , 'a' , 'b' )
console . log ( 'removed:' , removed , 'arr: ' , arr )Apa output cuplikan kode di atas?
Metode Array.splice() digunakan untuk memodifikasi array dengan menambahkan, menghapus, atau mengganti elemen.
Dalam hal ini, cuplikan kode menggunakan arr.splice(1, 2, 'a', 'b') , yang dimulai dari indeks 1 (menghapus 2 elemen) dan memasukkan elemen a dan b di tempatnya. Elemen yang dihapus (yaitu, 2 dan 3) dikembalikan dan ditugaskan ke variabel yang dihapus. Setelah eksekusi, dihapus akan menjadi [2, 3] dan arr akan menjadi [1, 'a', 'b', 4, 5] . Opsi C salah karena mencakup elemen yang dimasukkan dalam array yang dihapus, yang tidak akurat. Opsi D juga salah karena menyebutkan elemen yang salah yang dihapus dari array.
const fruits = [ 'apple' , 'banana' , 'orange' , 'grape' , 'apple' , 'kiwi' ]
const index = fruits . indexOf ( 'orange' )
const lastIndex = fruits . lastIndexOf ( 'apple' )
const result = fruits . includes ( 'grape' )
console . log ( 'index: ' , index , 'lastIndex: ' , lastIndex , 'result: ' , result )Apa output cuplikan kode di atas?
Metode Array.indexOf() mencari indeks kejadian pertama dari nilai yang ditentukan dalam buah array. Dalam hal ini, "oranye" ditemukan pada indeks 2, jadi index akan menjadi 2.
Metode Array.lastIndexOf() mencari indeks kejadian terakhir dari nilai yang ditentukan dalam buah array. Dalam hal ini, "Apple" muncul dua kali dalam array dan kejadian terakhirnya adalah pada indeks 4, jadi lastIndex akan menjadi 4.
Di sisi lain, metode Array.includes() memeriksa apakah nilai yang ditentukan "anggur" ada dalam buah array, dan karena "anggur" ada dalam array, result akan benar.
function isDivisibleBy7 ( num ) {
return num % 7 == 0
}
const nums = [ 28 , 7 , 3 , 29 , 15 , 1 , 2 , 23 ]
const filterResult = nums . filter ( isDivisibleBy7 )
const findResult = nums . find ( num => num < 10 )
const findIndexResult = nums . findIndex ( num => num / 2 == 14 )
console . log (
'filterResult:' ,
filterResult ,
'findResult:' ,
findResult ,
'findIndexResult:' ,
findIndexResult ,
)Apa output cuplikan kode di atas?
Metode Array.filter() mengembalikan array yang berisi semua elemen di mana fungsi yang diteruskan ke sana mengembalikan true. Dalam hal ini, fungsi isDivisibleBy7 kembali benar untuk angka apa pun yang dapat dibagi dengan 7. Dalam array nums , 7 dan 28 dapat dibagi dengan 7, jadi nums.filter(isDivisibleBy7) kembali [28, 7].
Metode Array.find() mengembalikan elemen pertama dalam array di mana fungsi yang diteruskan ke sana mengembalikan true. Dalam hal ini, fungsi yang diteruskan untuk itu mengembalikan benar untuk angka apa pun kurang dari 10. Ada beberapa angka dalam nums yang kurang dari 10, tetapi karena Array.find() hanya mengembalikan yang pertama yang benar, nums.find((num) => num < 10) mengembalikan 7.
Metode Array.findIndex() mirip dengan metode Array.find() , tetapi mengembalikan indeks elemen pertama dalam array yang fungsi yang diteruskan ke sana mengembalikan true, daripada elemen itu sendiri. Dalam hal ini, fungsi yang diteruskan ke IT kembali berlaku untuk 28, karena 28/2 == 14. 28 ada di nums array dan pada indeks 0, jadi nums.find((num) => num / 2 == 14) Mengembalikan 0.
const numbers = [ 1 , 2 , 3 , 4 , 5 ]
const doubledNumbers = numbers . map ( num => num * 2 )
console . log ( doubledNumbers )Apa output cuplikan kode di atas?
Metode Array.map() dalam JavaScript membuat array baru dengan menerapkan fungsi yang disediakan untuk setiap elemen array asli.
Dalam hal ini, fungsi yang disediakan num => num * 2 mengalikan setiap angka dalam array angka dengan 2, menghasilkan array baru [2, 4, 6, 8, 10] .
const numbers = [ 1 , 2 , 3 , 4 , 5 ]
const sum = numbers . reduce ( ( acc , val ) => acc + val )
console . log ( sum )Apa output cuplikan kode di atas?
Array.reduce() mengambil array dan "mengurangi" ke nilai tunggal dengan berulang kali menerapkan fungsi untuk setiap elemen dan melacak hasil yang terakumulasi. Ini biasanya digunakan untuk tugas -tugas seperti menyimpulkan serangkaian angka, menemukan nilai maksimum, atau menggabungkan array string menjadi satu string.
Dalam hal ini, metode RedICE () mengambil fungsi panggilan balik yang dieksekusi untuk setiap elemen array. Fungsi callback mengambil dua parameter, acc dan val , yang masing -masing mewakili akumulator dan nilai array saat ini.
Di dalam fungsi callback, nilai array saat ini ditambahkan ke akumulator dan hasilnya dikembalikan. Metode reduce() memperbarui nilai akumulator dengan masing -masing iterasi sampai ia telah mengulangi semua elemen array.
Akhirnya, metode reduce() mengembalikan nilai akhir dari akumulator, yang merupakan jumlah dari semua angka dalam array, yaitu 15.
const arr = [ 1 , 2 , 3 , 4 ]
const result = arr . reduceRight ( ( acc , curr ) => acc + curr )
console . log ( result )Apa output cuplikan kode di atas?
Metode reduceRight() mirip dengan metode reduce() , kecuali bahwa ia mulai mengurangi array dari elemen paling kanan ke elemen paling kiri. Metode reduceRight() menerapkan fungsi terhadap akumulator dan setiap nilai array (dari kanan-ke-kiri) untuk menguranginya ke nilai tunggal.
Dalam cuplikan kode yang diberikan, array arr berisi nilai [1, 2, 3, 4] . Metode reduceRight() dipanggil pada array ini dengan fungsi callback yang menambahkan accumulator acc dengan curr elemen saat ini.
Dalam iterasi pertama, nilai curr akan menjadi 4 , dan nilai ACC tidak akan undefined , karena tidak ada nilai awal yang disediakan. Oleh karena itu, hasil iterasi pertama adalah 4 .
Dalam iterasi kedua, nilai curr akan menjadi 3 , dan nilai acc akan menjadi hasil dari iterasi sebelumnya, yaitu 4 . Oleh karena itu, hasil iterasi kedua adalah 7 .
Dalam iterasi ketiga, nilai curr akan menjadi 2 , dan nilai acc akan menjadi hasil dari iterasi sebelumnya, yaitu 7 . Oleh karena itu, hasil iterasi ketiga adalah 9 .
Dalam iterasi keempat dan terakhir, nilai curr akan menjadi 1 , dan nilai acc akan menjadi hasil dari iterasi sebelumnya, yaitu 9 . Oleh karena itu, hasil iterasi keempat adalah 10 .
Oleh karena itu, output akhir dari kode adalah 10 . Oleh karena itu, opsi yang benar adalah A.
const arr = [ 'Centauri' , 3.14159 , 'canine' , 11235 , undefined ]
const result = arr . sort ( )
console . log ( result )Apa output cuplikan kode di atas?
Secara default metode sort() mengurutkan elemen berdasarkan karakter sehingga 11235 datang sebelum 3.14159 karena 1 datang sebelum 3.
Kata -kata dan huruf diurutkan secara abjad dengan kode ASCII SO "Centauri" yang dimulai dengan huruf C (ASCII Code 67) yang besar sebelum "Canine" yang dimulai dengan huruf kecil C (Kode ASCII 99).
Elemen yang tidak ditentukan selalu menyortir ke akhir array.
Dengan demikian, output akhir dari kode adalah [11235, 3.14159, 'centauri', 'anjing', tidak terdefinisi] yang merupakan opsi D.
let numbers = [ 1 , 2 , 3 , undefined , 6 , 7 , 8 , 9 ]
let [ a , , b , c = 2 , ... rest ] = numbers
console . log ( a , b , c , rest )Apa output cuplikan kode di atas?
Dengan array yang merusak, dimungkinkan untuk membongkar nilai -nilai tertentu dari array ke dalam variabel individu. Nilai yang kami buat di sisi kiri ( a, b, c, rest ) sesuai dengan nilai dan urutan array yang kami tetapkan di sisi kanan ( numbers ).
Variabel a sesuai dengan elemen pertama dari array, yaitu 1 .
Karena kami tidak menentukan variabel untuk nilai 2 berikutnya, nilainya tidak diperhitungkan dalam evaluasi dan dilewati.
Variabel b sesuai dengan elemen ketiga dari array, yaitu 3 .
Dimungkinkan untuk mengatur nilai default untuk variabel jika elemen dalam array undefined . Karena elemen keempat dalam array undefined , variabel c memiliki nilai default 2 .
Dengan operator spread ( ... ) kami dapat menetapkan nilai -nilai yang tersisa dari array ke variabel. Karena nilai -nilai [ 6, 7, 8, 9 ] adalah nilai yang tersisa dari array, mereka ditugaskan ke variabel rest .
Oleh karena itu, hasil akhirnya adalah: 1 3 2 [ 6, 7, 8, 9 ] , yang merupakan opsi B.
const date1 = new Date ( )
const date2 = new Date ( '1995-12-17T05:10:00' )
const date3 = new Date ( '1995-10-15T08:12:15+02:00' )
console . log ( date1 , '' , date2 , '' , date3 )Apa output cuplikan kode di atas?
new Date() akan mengembalikan tanggal dan waktu saat ini diikuti oleh dua tanggal yang ditentukan dalam format "yyyy-mm-ddthh: mm: ss.sssz", di mana "z" mewakili offset zona waktu UTC.
YYYY-MM-DDTHH:mm:ss.sssZ adalah format yang digunakan untuk mewakili tanggal dan waktu dalam standar ISO 8601. Ini terdiri dari komponen berikut:
YYYY : Tahun empat digit (0000 hingga 9999), atau sebagai tahun yang diperluas dengan + atau - diikuti oleh enam digit. Tanda diperlukan untuk tahun yang diperluas. -000000 secara eksplisit dilarang sebagai tahun yang valid.MM : Bulan dua digit (01 = Januari, 02 = Februari, dan seterusnya). Itu default ke 01.DD : Hari dua digit bulan (01 hingga 31)T : Pemisah yang menunjukkan awal komponen waktuHH : dua digit jam dalam format 24 jam (00 hingga 23). Sebagai kasus khusus, 24:00:00 diizinkan, dan ditafsirkan sebagai tengah malam di awal hari berikutnya. Default ke 00.mm : Dua digit menit (00 hingga 59). Default ke 00.ss : Dua digit detik (00 hingga 59). Default ke 00..sss : komponen milidetik (000 hingga 999). Default ke 000.Z : Sufiks yang menunjukkan bahwa waktunya di UTC (waktu universal terkoordinasi), tanpa offset. Ini bisa menjadi karakter literal Z (menunjukkan UTC), atau + atau - diikuti oleh HH: mm, offset dalam jam dan menit dari UTC. const date = new Date ( 'Mart 15, 1975 23:15:30' )
date . setMinutes ( 10 )
date . setUTCDate ( 5 )
console . log (
'Minutes:' + date . getMinutes ( ) + ',' ,
'' ,
'Year:' + date . getFullYear ( ) + ',' ,
'' ,
'UTCDate:' + date . getUTCDate ( ) ,
)Apa output cuplikan kode di atas?
Kode yang disediakan membuat objek tanggal yang diinisialisasi dengan tanggal dan waktu "15 Maret 1975 23:15:30".
Kemudian, itu memodifikasi tanggal menit dan UTC dari objek tanggal menggunakan metode setMinutes() dan setUTCDate() .
Akhirnya, mencatat nilai yang diperbarui dari menit, tahun, dan tanggal UTC menggunakan console.log() .
Setelah memodifikasi menit menjadi 10 menggunakan setMinutes(10) , metode getMinutes() mengembalikan nilai yang diperbarui dari 10.
Setelah memodifikasi tanggal UTC ke 5 menggunakan setUTCDate(5) , metode getUTCDate() mengembalikan nilai yang diperbarui dari 5.
Metode getFullYear() mengembalikan tahun yang tidak berubah, yaitu tahun 1975.
const date1 = new Date ( '2023-5-1' )
const next_us_election = new Date ( '2024-11-5' )
const difference_in_time = next_us_election . getTime ( ) - date1 . getTime ( )
const difference_in_days = difference_in_time / ( 1000 * 3600 * 24 )
console . log ( parseInt ( difference_in_days , 10 ) + ' Days' )Apa output cuplikan kode di atas?
Kode menghitung perbedaan dalam hari antara tanggal "2023-5-1" dan tanggal pemilihan AS berikutnya "2024-11-5". Ini menggunakan objek Date untuk membuat dua tanggal: date1 mewakili 1 Mei 2023, dan next_us_election mewakili 5 November 2024.
Metode getTime() digunakan untuk mendapatkan nilai waktu dalam milidetik untuk setiap tanggal. Dengan mengurangi nilai waktu date1 dari next_us_election , kami mendapatkan perbedaan waktu dalam milidetik.
Untuk mengonversi perbedaan waktu dari milidetik menjadi hari, kami membaginya dengan jumlah milidetik dalam sehari (1000 _ 3600 _ 24). Hasilnya disimpan dalam difference_in_days variabel_in_days.
Akhirnya, fungsi parseInt() digunakan untuk mengonversi nilai perbedaan_in_days ke integer, dan hasilnya dicatat ke konsol bersama dengan string "hari". Outputnya akan menjadi "554 hari".
let person = {
name : 'John' ,
age : 30 ,
hobbies : [ 'reading' , 'traveling' , 'cooking' ] ,
address : {
street : '123 Main St' ,
city : 'New York' ,
state : 'NY' ,
} ,
sayHello : function ( ) {
console . log ( 'Hello, my name is ' + this . name )
} ,
}
console . log ( person . name )
console . log ( person . hobbies [ 1 ] )
console . log ( person . address . city )
person . sayHello ( )Apa output cuplikan kode di atas?
Kode ini mendefinisikan objek person literal dengan properti seperti name , age , hobbies , dan address , dan metode sayHello .
Pernyataan console.log() mencetak nilai name , elemen kedua dari array hobbies (yang "bepergian"), dan nilai properti city dalam objek address (yang "New York").
Akhirnya, metode sayHello dipanggil pada objek person menggunakan notasi titik, yang menghasilkan string "Halo, nama saya John" ke konsol.
function User ( username ) {
this . username = username
this . updateUsername = newName => {
this . username = newName
}
}
const user1 = new User ( 'kirandash' )
const user2 = new User ( 'bgwebagency' )
user1 . updateUsername ( 'kirandash-website' )
user2 . updateUsername ( 'bgwebagency-app' )
console . log ( user1 . username , user2 . username )Apa output cuplikan kode di atas?
Kode ini mendefinisikan User fungsi konstruktor yang membuat objek user dengan properti username dan metode updateUsername . Dua objek user , user1 dan user2 , dibuat dengan nama pengguna awal 'kirandash' dan 'bgwebagency' masing -masing.
Metode updateUsername dipanggil pada objek user1 dan user2 untuk memperbarui nama pengguna mereka. Nama pengguna user1 diperbarui ke 'Kirandash-Website', dan nama pengguna user2 diperbarui ke 'bgwebagency-app'.
Akhirnya, kode mencatat gabungan user1.username dan user2.username , yang menghasilkan output 'Kirandash-Website bgwebagency-app'.
function greet ( name ) {
console . log ( `Hello, ${ name } ! Welcome to ${ this . location } .` )
}
const person = {
location : 'New York' ,
}
greet . call ( person , 'John' )
greet . apply ( person , [ 'Alex' ] )
const greetPerson = greet . bind ( person )
greetPerson ( 'Thomas' )Apa output cuplikan kode di atas?
The call function is used to invoke the greet function with the person object as the context (the value of this ) and 'John' as the argument.
The apply function is used to invoke the greet function with the person object as the context (the value of this ) and an array ['Alex'] as the arguments.
The bind function is used to create a new function greetPerson with the person object as the bound context (the value of this ).
In summary, the code demonstrates how call , apply , and bind can be used to invoke a function with a specific context and arguments
class Animal {
constructor ( name ) {
this . name = name
}
static makeSound ( ) {
console . log ( 'Generic animal sound' )
}
sayName ( ) {
console . log ( `My name is ${ this . name } ` )
}
}
const a1 = new Animal ( 'Lion' )
const a2 = new Animal ( 'Time' )
Animal . makeSound ( )
a1 . makeSound ( )
a2 . makeSound ( )What does the above code snippet output?
The static method makeSound() is defined on the Animal class, and is accessible directly through the class itself, ie, Animal.makeSound() . This will output "Generic animal sound" to the console.
However, when we try to call makeSound() on an instance of the Animal class (a1.makeSound() and a2.makeSound()) , we get a TypeError, because static methods can only be accessed through the class itself and not through its instances.
function Animal ( name ) {
this . name = name
}
Animal . prototype . eat = function ( ) {
console . log ( this . name + ' is eating.' )
}
function Dog ( name ) {
Animal . call ( this , name )
}
Dog . prototype = Object . create ( Animal . prototype )
Dog . prototype . constructor = Dog
Dog . prototype . bark = function ( ) {
console . log ( this . name + ' is barking.' )
}
function CustomArray ( ) {
Array . call ( this )
}
CustomArray . prototype = Object . create ( Array . prototype )
CustomArray . prototype . constructor = CustomArray
CustomArray . prototype . sum = function ( ) {
return this . reduce ( ( acc , val ) => acc + val , 0 )
}
var dog = new Dog ( 'Buddy' )
dog . eat ( )
dog . bark ( )
var numbers = new CustomArray ( )
numbers . push ( 1 , 2 , 3 , 4 , 5 )
console . log ( numbers . sum ( ) )What will be the output of the following code
Explanation: In this example, we have a base class called Animal that defines a constructor and an eat() method. The subclass Dog extends the Animal class and adds its own constructor, bark() method, and a specific property breed .
Furthermore, we extend the built-in Array class using the class syntax to create a CustomArray class. The CustomArray class adds a custom method called sum() that calculates the sum of the array elements.
In the usage section, we create an instance of Dog named dog with the name "Buddy" . We can call the inherited eat() method from the Animal class, the bark() method defined in the Dog class.
Additionally, we create an instance of CustomArray called numbers and add some numbers to it. We can call the custom sum() method, which is added to the built-in Array class through subclassing.
This example showcases inheritance, subclassing, and extending a built-in class in JavaScript, illustrating how classes can be extended and customized to add additional functionality.
const person = {
name : 'John' ,
age : 30 ,
city : 'New York' ,
}
const { name , age , city } = person
console . log ( name )
console . log ( age )
console . log ( city )What will be the output of the following code
In the code above, we have an object literal called person with properties name , age , and city . We then use object destructuring to extract those properties into separate variables ( name , age , and city ). After destructuring, we can use these variables to access the corresponding values from the object.
Consider the following code snippet:
// module.mjs
export const PI = 3.14159
export function calculateArea ( radius ) {
return PI * radius * radius
}
export default function calculateCircumference ( radius ) {
return 2 * PI * radius
}
// script.mjs
import calculateCircumference , { PI , calculateArea } from './module.mjs'
console . log ( PI ) // Output: ________
console . log ( calculateArea ( 5 ) ) // Output: ________
console . log ( calculateCircumference ( 5 ) ) // Output: ________What will be the output of the console.log statements in the code above?
Options:
3.14159 , 78.53975 , 31.41593.14159 , 78.53975 , 62.83183.14159 , 78.53975 , NaN3.14159 , NaN , 62.8318 The module.js file exports three entities:
PI is a named export, exported using the export keyword.calculateArea is a named export, exported using the export keyword.calculateCircumference is the default export, exported using the export default syntax. In the main.js file, we import PI and calculateArea as named exports using the destructuring assignment syntax. We also import calculateCircumference as the default export. The import statements reference the module.js file using the relative file path ./module.js .
The outputs of the console.log statements will be:
console.log(PI) will output 3.14159 since we imported the named export PI .console.log(calculateArea(5)) will output 78.53975 since we imported the named export calculateArea and called the function with a radius of 5.console.log(calculateCircumference(5)) will output 62.8318 since we imported the default export calculateCircumference and called the function with a radius of 5. Consider the following code snippet:
// foo.js
function foo ( ) {
console . log ( `Foo` )
}
export { foo } What is the correct Syntax to import the function foo ?
Options:
import foo from "./foo"import foo as FooFunction from "./foo"import { foo } from "./foo"import { foo } from "./bar" Named exports are imported into different files with braces and must be imported with the name of the object, function or variable that was exported. In this example, a function with the name foo is exported from the file foo.js . Accordingly, the correct expression is: import { foo } from "./foo" .
In JavaScript, when importing a default export from a module, which syntax correctly assigns an alias "myAlias" to the default import?
Explanation: Both option B and C are valid syntaxes for importing a default export from a module and assigning it an alias. The difference between the two syntaxes is that option B does not use the { default as myAlias } syntax. This means that the default export will be imported under the name myAlias, rather than the name default.
Here is an example of how to use the option B syntax:{import myAlias from 'module';},This will import the default export from the module module and assign it the name myAlias. You can then use the myAlias variable to access the default export from the module module. Here is an example of how to use the option C syntax:{import { default as myAlias } from 'module';},This will import the default export from the module module and assign it the alias myAlias. You can then use the myAlias alias to access the default export from the module module.
The choice of which syntax to use is up to you. The option B syntax is simpler, but it can lead to collisions if there is already a variable named myAlias in the current scope. The option C syntax is more verbose, but it avoids collisions.
Which method is used to convert a JavaScript object to a JSON string while preserving data types like Dates and RegEx?
JSON.stringify()JSON.stringify() with a custom replacer functionJSON.toTypedString()JSON.stringify()JSON.stringify() with a custom replacer function. Explanation: The JSON.stringify() method can be used to convert a JavaScript object to a JSON string. However, by default, it will not preserve data types like Dates and RegEx . To preserve these data types, you can use a custom replacer function. The replacer function takes an object as input and returns a new object with the modified values.
The code below would show you how to use a custom replacer function to preserve data types:
function replacer ( key , value ) {
if ( typeof value === 'Date' ) {
return value . toJSON ( )
} else if ( typeof value === 'RegExp' ) {
return value . toString ( )
} else {
return value
}
}
const object = {
date : new Date ( ) ,
regex : / some regex / ,
}
const jsonString = JSON . stringify ( object , replacer )