Rumah  >  Artikel  >  hujung hadapan web  >  Soalan temuduga teknikal javascript yang paling mencabar dan paling sukar dengan penyelesaian.

Soalan temuduga teknikal javascript yang paling mencabar dan paling sukar dengan penyelesaian.

Susan Sarandon
Susan Sarandonasal
2024-10-19 14:31:02610semak imbas

Hello! Saya Vishal Tiwari dan saya akan memberikan anda beberapa soalan temuduga javascript yang mencabar.

1. Apakah output kod berikut?

console.log(typeof null); // Output?

Jawapan:

Output: objek

Penjelasan: Ini adalah kebiasaan yang terkenal dalam JavaScript. Pengendali jenis mengembalikan "objek" apabila digunakan pada null, walaupun null bukan objek. Tingkah laku ini disebabkan oleh cara JavaScript dilaksanakan dan telah dikekalkan untuk keserasian ke belakang.


2. Apakah yang akan menjadi output kod berikut?

console.log(0.1 + 0.2 === 0.3); // Output?

Jawapan:

Output: palsu

Penjelasan: Disebabkan cara aritmetik titik terapung berfungsi dalam JavaScript (dan banyak bahasa pengaturcaraan), 0.1 0.2 tidak sama dengan 0.3. Sebaliknya, ia menghasilkan 0.30000000000000004, yang membawa kepada perbandingan mengembalikan palsu.


3. Apakah yang akan menjadi output kod berikut?

const a = {};
const b = { key: 'b' };
const c = { key: 'c' };

a[b] = 123; // What happens here?
console.log(a[b]); // Output?

Jawapan:

Output: 123

Penjelasan: Apabila anda cuba menetapkan sifat pada objek menggunakan objek lain sebagai kunci (a[b]), JavaScript menukar objek b kepada rentetan, yang menghasilkan "[objek Objek ]". Oleh itu, anda pada dasarnya menetapkan sifat "[objek objek]" kepada 123 dan apabila anda log a[b], ia mengembalikan 123.


4. Apakah output kod berikut?

const arr = [1, 2, 3];
arr[10] = 11;
console.log(arr.length); // Output?

Jawapan:

Output: 11

Penjelasan: Apabila anda menetapkan nilai pada indeks yang lebih besar daripada panjang semasa tatasusunan (seperti arr[10] = 11), JavaScript mencipta "slot kosong" dalam tatasusunan untuk indeks dari 3 hingga 9. Walau bagaimanapun, sifat panjang tatasusunan mencerminkan indeks tertinggi tambah satu, yang dalam kes ini ialah 11.


5. Apakah yang akan menjadi output kod berikut?

let x = 1;
let y = 2;

const obj = {
    x: 10,
    y: 20,
    sum: function() {
        return this.x + this.y;
    }
};

console.log(obj.sum()); // Output?
console.log(obj.sum.call({ x: 100, y: 200 })); // Output?
console.log(obj.sum.apply({ x: 1000, y: 2000 })); // Output?

Jawapan:

Output:

  • Konsol.log pertama: 30
  • Konsol.log kedua: 300
  • Konsol.log ketiga: 3000

Penjelasan:

  • obj.sum() menggunakan konteks obj ini, jadi ia menambah 10 dan 20, mengembalikan 30.
  • obj.sum.call({ x: 100, y: 200 }) menggunakan kaedah panggilan untuk menukar ini kepada objek baharu dengan nilai x dan y masing-masing 100 dan 200, mengembalikan 300.
  • obj.sum.apply({ x: 1000, y: 2000 }) melakukan perkara yang sama dengan apply, mengembalikan 3000.

6. Apakah yang akan menjadi output kod berikut?

console.log(1 + '1'); // Output?
console.log(1 - '1'); // Output?

Jawapan:

Output:

  • Konsol.log pertama: '11'
  • Konsol.log kedua: 0

Penjelasan:

  • Dalam 1 '1', JavaScript melakukan paksaan jenis, menukar nombor 1 kepada rentetan, menghasilkan '11'.
  • Dalam 1 - '1', JavaScript menukar rentetan '1' kepada nombor, menghasilkan 1 - 1, yang sama dengan 0.

7. Apakah output kod berikut?

console.log(typeof null); // Output?

Jawapan:

Output: Output akan bergantung pada konteks di mana foo dipanggil, tetapi jika dalam konteks global, ia akan log objek global (tetingkap dalam penyemak imbas atau global dalam Node.js).

Penjelasan: Dalam fungsi anak panah, ini terikat secara leksikal, bermakna ia menggunakan nilai ini daripada konteks sekeliling. Jika foo dipanggil dalam skop global, ini akan merujuk kepada objek global.


8. Apakah output kod berikut?

console.log(0.1 + 0.2 === 0.3); // Output?

Jawapan:

Output:

  • Konsol.log pertama: 1
  • Konsol.log kedua: 2
  • Konsol.log ketiga: 2
  • Konsol.log keempat: 1
  • Konsol.log kelima: 1

Penjelasan: Fungsi createCounter mencipta penutupan yang mengekalkan pembolehubah kiraannya sendiri. Setiap kaedah (kenaikan, pengurangan, getCount) mengakses dan mengubah suai pembolehubah kiraan yang sama, memberikan gelagat yang konsisten.


9. Apakah yang akan menjadi output kod berikut?

const a = {};
const b = { key: 'b' };
const c = { key: 'c' };

a[b] = 123; // What happens here?
console.log(a[b]); // Output?

Jawapan:

Output: [99, 2, 3]

Penjelasan: Dalam JavaScript, tatasusunan (seperti semua objek) ialah jenis rujukan. Apabila b ditugaskan kepada a, kedua-dua pembolehubah menghala ke tatasusunan yang sama dalam ingatan. Oleh itu, mengubah suai b mempengaruhi a.


10. Apakah output kod berikut?

const arr = [1, 2, 3];
arr[10] = 11;
console.log(arr.length); // Output?

Jawapan:

Output: 3

Penjelasan: Dalam contoh ini, fungsi dalam mempunyai pembolehubah sendiri, yang membayangi pembolehubah dalam fungsi luar. Apabila console.log(a) dipanggil dalam inner, ia merujuk kepada a yang ditakrifkan dalam inner, iaitu 3.

11. Apakah output kod berikut?

let x = 1;
let y = 2;

const obj = {
    x: 10,
    y: 20,
    sum: function() {
        return this.x + this.y;
    }
};

console.log(obj.sum()); // Output?
console.log(obj.sum.call({ x: 100, y: 200 })); // Output?
console.log(obj.sum.apply({ x: 1000, y: 2000 })); // Output?

Jawapan:

Output: { a: 1, b: 3, c: 4 }

Penjelasan: Kaedah Object.assign() menyalin nilai semua sifat terhitung daripada satu atau lebih objek sumber (obj1 dan obj2) kepada objek sasaran (objek kosong {}). Jika sifat yang sama wujud dalam berbilang objek sumber, yang terakhir diutamakan. Oleh itu, b: 3 daripada obj2 menimpa b: 2 daripada obj1.


12. Apakah yang akan menjadi output kod berikut?

console.log(1 + '1'); // Output?
console.log(1 - '1'); // Output?

Jawapan:

Output: tidak ditentukan

Penjelasan: JavaScript secara automatik menyisipkan koma bertitik selepas penyataan kembali jika terdapat pemisah baris. Oleh itu, ia ditafsirkan sebagai pulangan;, yang mengembalikan tidak ditentukan. Untuk mengembalikan objek, anda harus meletakkan pendakap pembukaan { pada baris yang sama dengan kata kunci kembali.


13. Apakah yang akan menjadi output kod berikut?

console.log(typeof null); // Output?

Jawapan:

Output: tidak ditentukan

Penjelasan: Pembolehubah x di dalam fungsi foo dinaikkan tetapi tidak dimulakan sehingga penugasan var x = 2;. Oleh itu, apabila console.log(x); dilaksanakan, x tempatan diisytiharkan tetapi belum ditetapkan, jadi ia menghasilkan tidak ditentukan.


14. Apakah output kod berikut?

console.log(0.1 + 0.2 === 0.3); // Output?

Jawapan:

Output: 99

Penjelasan: Kedua-dua a dan b merujuk kepada tatasusunan yang sama dalam ingatan. Apabila anda mengubah suai b[0], anda turut mengubah suai a[0] kerana kedua-duanya merujuk tatasusunan yang sama.


15. Apakah yang akan menjadi output kod berikut?

const a = {};
const b = { key: 'b' };
const c = { key: 'c' };

a[b] = 123; // What happens here?
console.log(a[b]); // Output?

Jawapan:

  • Consol.log pertama: "123"
  • Console.log kedua: "33"

Penjelasan:

  • Dalam 1 "2" "3", JavaScript menukar 1 kepada rentetan dan menggabungkan, menghasilkan "12" dan kemudian "123".
  • Dalam 1 2 "3", JavaScript mula-mula menilai 1 2, yang bersamaan dengan 3 (nombor), dan kemudian menggabungkan "3", menghasilkan "33".

16. Apakah yang akan menjadi output kod berikut?

const arr = [1, 2, 3];
arr[10] = 11;
console.log(arr.length); // Output?

Jawapan:

Output: []

Penjelasan: Menetapkan sifat panjang tatasusunan kepada 0 dengan berkesan mengosongkan tatasusunan. Oleh itu, arr kini merupakan tatasusunan kosong.


17. Apakah yang akan menjadi output kod berikut?

let x = 1;
let y = 2;

const obj = {
    x: 10,
    y: 20,
    sum: function() {
        return this.x + this.y;
    }
};

console.log(obj.sum()); // Output?
console.log(obj.sum.call({ x: 100, y: 200 })); // Output?
console.log(obj.sum.apply({ x: 1000, y: 2000 })); // Output?

Jawapan:

Output: 2

Penjelasan: Fungsi dalam, apabila dipanggil, mempunyai pembolehubah sendiri iaitu 2. Apabila anda memanggil innerFunc(), ia log 2 kerana ia merujuk kepada pembolehubah tempatan a dalam dalam.


18. Apakah yang akan menjadi output kod berikut?

console.log(1 + '1'); // Output?
console.log(1 - '1'); // Output?

Jawapan:

Output: 3

Penjelasan: Kaedah c dipanggil pada obj, jadi di dalam kaedah ini merujuk kepada obj. Oleh itu, ia mengeluarkan hasil tambah obj.a dan obj.b, iaitu 3.


19. Apakah output kod berikut?

const foo = () => {
    console.log(this);
};

foo(); // Output?

Jawapan:

  • Konsol.log pertama: palsu
  • Konsol.log kedua: benar

Penjelasan:

  • Pernyataan pertama mengembalikan palsu kerana isu ketepatan titik terapung (0.1 0.2 bersamaan dengan 0.30000000000000004).
  • Pernyataan kedua membundarkan 0.1 0.2 kepada 0.3 dengan toFixed(1) dan menukarkannya kembali kepada nombor, menghasilkan perbandingan 0.3 === 0.3, iaitu benar.

20. Apakah yang akan menjadi output kod berikut?

console.log(typeof null); // Output?

Jawapan:

Output: objek global (atau tidak ditentukan dalam mod ketat)

Penjelasan: Dalam mod tidak ketat, nilai ini di dalam fungsi yang dipanggil dalam konteks global ialah objek global (iaitu, tetingkap dalam penyemak imbas atau global dalam Node.js). Dalam mod ketat, ini tidak akan ditentukan.

21. Apakah yang akan menjadi output kod berikut?

console.log(0.1 + 0.2 === 0.3); // Output?

Jawapan:

  • Konsol.log pertama: 2
  • Konsol.log kedua: 1

Penjelasan:

  • Object.assign(obj3, obj2) menyalin sifat daripada obj2 ke obj3, jadi obj3.a menjadi 2.
  • obj3.__proto__ merujuk kepada obj1, yang mempunyai sifat a dengan nilai 1.

22. Apakah yang akan menjadi output kod berikut?

const a = {};
const b = { key: 'b' };
const c = { key: 'c' };

a[b] = 123; // What happens here?
console.log(a[b]); // Output?

Jawapan:

Output: 3

Penjelasan: Dalam fungsi dalam, a merujuk kepada pembolehubah yang ditakrifkan di luar. Apabila inner dipanggil, a dinaikkan daripada 2 kepada 3 dan dilog.


23. Apakah yang akan menjadi output kod berikut?

const arr = [1, 2, 3];
arr[10] = 11;
console.log(arr.length); // Output?

Jawapan:

Output: Helo, nama saya tidak ditentukan

Penjelasan: Apabila salam dipanggil tanpa konteks (iaitu, bukan sebagai kaedah orang), ini tidak terikat kepada orang. Dalam mod tidak ketat, ini lalai kepada objek global, dan memandangkan nama tidak ditakrifkan pada objek global, ia log tidak ditentukan.


24. Apakah output kod berikut?

let x = 1;
let y = 2;

const obj = {
    x: 10,
    y: 20,
    sum: function() {
        return this.x + this.y;
    }
};

console.log(obj.sum()); // Output?
console.log(obj.sum.call({ x: 100, y: 200 })); // Output?
console.log(obj.sum.apply({ x: 1000, y: 2000 })); // Output?

Jawapan:

  • Konsol.log pertama: benar
  • Konsol.log kedua: benar

Penjelasan:

  • Untuk console.log([1] == benar), tatasusunan [1] ditukar kepada jenis primitif, menghasilkan 1 dan 1 == benar adalah benar.
  • Untuk console.log([0] == false), tatasusunan [0] bertukar kepada 0 dan 0 == false juga benar.

25. Apakah yang akan menjadi output kod berikut?

console.log(1 + '1'); // Output?
console.log(1 - '1'); // Output?

Jawapan:

  • Fo pertama(): 1
  • Fo kedua(): 2
  • Fo ketiga(): 3

Penjelasan: Fungsi foo mengekalkan penutupan sekitar pembolehubah kiraan, yang dinaikkan setiap kali foo dipanggil, mengekalkan keadaannya merentas panggilan.


26. Apakah yang akan menjadi output kod berikut?

console.log(typeof null); // Output?

Jawapan:

Output:

  • Konsol pertama.log(a): 1
  • Konsol.log(b): 2
  • Konsol ketiga.log(c): 3

Penjelasan: a boleh diakses dalam fungsi kedua kerana penutupan. b juga boleh diakses seperti yang ditakrifkan pada mulanya. c ialah setempat kepada kedua, jadi ketiga-tiga pembolehubah dilog dengan betul.


27. Apakah yang akan menjadi output kod berikut?

console.log(0.1 + 0.2 === 0.3); // Output?

Jawapan:

Output: 3

Penjelasan: Kaedah panggilan memanggil kenaikan dengan newObj seperti ini, jadi this.num merujuk kepada newObj.num. Operasi kenaikan menukar Obj.num baharu daripada 2 kepada 3.


28. Apakah output kod berikut?

const a = {};
const b = { key: 'b' };
const c = { key: 'c' };

a[b] = 123; // What happens here?
console.log(a[b]); // Output?

Jawapan:

Output:

const arr = [1, 2, 3];
arr[10] = 11;
console.log(arr.length); // Output?

Penjelasan: Fungsi setTimeout semuanya merujuk pembolehubah i yang sama kerana pengangkatan. Apabila tamat masa dilaksanakan, i telah dinaikkan kepada 4, menyebabkan 4 dilog tiga kali.


29. Apakah yang akan menjadi output kod berikut?

let x = 1;
let y = 2;

const obj = {
    x: 10,
    y: 20,
    sum: function() {
        return this.x + this.y;
    }
};

console.log(obj.sum()); // Output?
console.log(obj.sum.call({ x: 100, y: 200 })); // Output?
console.log(obj.sum.apply({ x: 1000, y: 2000 })); // Output?

Jawapan:

  • tatasusunan: [1, 2, 3]
  • newArray: [2, 3, 4]

Penjelasan: Fungsi peta mencipta tatasusunan baharu berdasarkan transformasi yang digunakan pada setiap item. Tatasusunan asal kekal tidak berubah, manakala tatasusunan baru mencerminkan kenaikan.


30. Apakah output kod berikut?

console.log(1 + '1'); // Output?
console.log(1 - '1'); // Output?

Jawapan:

Output: Output akan bergantung pada konteks di mana foo dipanggil, tetapi jika dalam konteks global, ia akan log objek global (tetingkap dalam penyemak imbas atau global dalam Node.js).

Penjelasan: Dalam fungsi anak panah, ini terikat secara leksikal, bermakna ia menggunakan nilai ini daripada konteks sekeliling. Jika foo dipanggil dalam skop global, ini akan merujuk kepada objek global.


31. Apakah yang akan menjadi output kod berikut?

const foo = () => {
    console.log(this);
};

foo(); // Output?

Jawapan:

Output: 42

Penjelasan: Fungsi dalam ialah fungsi anak panah, yang secara leksikal mengikatnya dengan konteks fungsi kaedah. Oleh itu, this.value merujuk kepada obj.value, iaitu 42.


32. Apakah yang akan menjadi output kod berikut?

function createCounter() {
    let count = 0;
    return {
        increment: function() {
            count++;
            return count;
        },
        decrement: function() {
            count--;
            return count;
        },
        getCount: function() {
            return count;
        }
    };
}

const counter = createCounter();
console.log(counter.increment()); // Output?
console.log(counter.increment()); // Output?
console.log(counter.getCount());  // Output?
console.log(counter.decrement()); // Output?
console.log(counter.getCount());  // Output?

Jawapan:

Output: ReferenceError

Penjelasan: Pembolehubah x dinaikkan dalam myFunction, bermakna ia wujud dalam skop fungsi tetapi tidak dimulakan sehingga selepas console.log(x). Ini mengakibatkan ReferenceError kerana pembolehubah x diakses sebelum pengisytiharannya.


33. Apakah yang akan menjadi output kod berikut?

console.log(typeof null); // Output?

Jawapan:

Output: Hello undefined

Penjelasan: Apabila salam dipanggil tanpa konteks yang jelas, ini tidak merujuk kepada obj, jadi this.name tidak ditentukan.


34. Apakah yang akan menjadi output kod berikut?

console.log(0.1 + 0.2 === 0.3); // Output?

Jawapan:

Output: nombor

Penjelasan: Dalam JavaScript, NaN (Bukan-Nombor) dianggap sebagai jenis angka dan jenis NaN mengembalikan "nombor".


35. Apakah yang akan menjadi output kod berikut?

const a = {};
const b = { key: 'b' };
const c = { key: 'c' };

a[b] = 123; // What happens here?
console.log(a[b]); // Output?

Jawapan:

Output: [1, 2, 3, 4]

Penjelasan: Kedua-dua a dan b merujuk kepada tatasusunan yang sama dalam ingatan. Apabila anda menolak 4 ke dalam b, ia turut mempengaruhi a.

Top Challenging and hardest javascript technical interview questions with solutions.

Atas ialah kandungan terperinci Soalan temuduga teknikal javascript yang paling mencabar dan paling sukar dengan penyelesaian.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn