7 soalan temuduga JavaScript untuk menyingkirkan yang palsu dan mengekalkan yang sebenar

z老师
Lepaskan: 2020-07-30 16:54:23
asal
3236 orang telah melayarinya

7 soalan temuduga JavaScript untuk menyingkirkan yang palsu dan mengekalkan yang sebenar

7 soalan temuduga JavaScript berikut yang perlu anda tanya sebelum temu duga. Jika tidak, kemungkinan besar masa anda akan terbuang.
1. Apakah dua cara untuk mencipta objek JavaScript?
Ini adalah soalan yang sangat mudah jika anda pernah menggunakan JavaScript. Anda perlu tahu sekurang-kurangnya satu cara. Tetapi, walaupun begitu, dalam pengalaman saya, terdapat juga ramai orang yang mengaku sebagai pengaturcara JavaScript yang mengatakan mereka tidak tahu bagaimana untuk menjawab soalan ini.

  • Gunakan kata kunci "baharu" untuk memanggil fungsi.

  • buka/tutup pendakap kerinting.

var o = {};
Anda juga boleh terus bertanya, "Bilakah kata kunci baharu mencipta objek Namun, memandangkan saya hanya mahu menghapuskan beberapa orang?" Jadi saya akan tunggu sehingga temuduga sebenar untuk bertanya soalan-soalan ini.

Disyorkan artikel berkaitan: Koleksi paling lengkap soalan temuduga js pada tahun 2020 (terkini)

2. Bagaimana untuk mencipta tatasusunan?
Ini adalah tahap soalan yang sama seperti "cara mencipta objek". Namun, ada juga sebilangan orang yang boleh menjawab soalan pertama tetapi tidak dapat menjawab soalan ini.
Gunakan kod berikut untuk mencipta tatasusunan hanya:
var myArray = new Array();
Mencipta tatasusunan ialah proses yang sangat rumit. Tetapi saya ingin mendengar jawapan daripada calon menggunakan kurungan segi empat sama.
var myArray = [];
Sudah tentu, kita boleh terus bertanya soalan lain, seperti cara mengalih keluar elemen pendua dalam tatasusunan JavaScript dengan cekap, dsb., tetapi kerana kita hanya perlu tahu sama ada calon itu layak pemerhatian lanjut, tentang saya akan menamatkan persoalan tatasusunan di sini.

Mari kita bincangkan tentang cara memadamkan elemen pendua dalam tatasusunan JavaScript dengan cekap: 5 kaedah tentang cara melaksanakan penyahduplikasian tatasusunan dalam js.

Pengenalan kaedah khusus:
1). Kaedah traversal tatasusunan
Kaedah paling mudah untuk mengalih keluar pendua: Cipta tatasusunan baharu, lalui tatasusunan yang masuk dan tambah nilai jika tidak dalam tatasusunan baru. Nota: Kaedah "indexOf" untuk menentukan sama ada nilai dalam tatasusunan ialah kaedah ECMAScript5 Anda perlu menulis lebih banyak kod yang serasi dengan versi yang lebih rendah pelayar. Kod sumber adalah seperti berikut:

// 最简单数组去重法
function unique1(array){
 var n = []; //一个新的临时数组
 //遍历当前数组
 for(var i = 0; i < array.length; i++){
  //如果当前数组的第i已经保存进了临时数组,那么跳过,
  //否则把当前项push到临时数组里面
  if (n.indexOf(array[i]) == -1) n.push(array[i]);
 }
 return n;
}
// 判断浏览器是否支持indexOf ,indexOf 为ecmaScript5新方法 IE8以下(包括IE8, IE8只支持部分ecma5)不支持
if (!Array.prototype.indexOf){
 // 新增indexOf方法
 Array.prototype.indexOf = function(item){
  var result = -1, a_item = null;
  if (this.length == 0){
   return result;
  }
  for(var i = 0, len = this.length; i < len; i++){
   a_item = this[i];
   if (a_item === item){
    result = i;
    break;
   }
  }
  return result;
 }
}
Salin selepas log masuk

2). idea: cipta objek js baharu dan tatasusunan baharu, dan apabila melintasi tatasusunan masuk, nilaikan Sama ada nilai itu adalah kunci objek js, jika tidak, tambahkan kunci pada objek itu dan masukkannya ke dalam tatasusunan baharu. Nota: Apabila menentukan sama ada ia adalah kunci objek js, "toString()" akan dilaksanakan secara automatik pada kunci masuk yang berbeza mungkin disalah anggap sama sebagai contoh: a[1], a["1"]. Untuk menyelesaikan masalah di atas, anda masih perlu memanggil "indexOf".

// 速度最快, 占空间最多(空间换时间)
function unique2(array){
 var n = {}, r = [], len = array.length, val, type;
  for (var i = 0; i < array.length; i++) {
    val = array[i];
    type = typeof val;
    if (!n[val]) {
      n[val] = [type];
      r.push(val);
    } else if (n[val].indexOf(type) < 0) {
      n[val].push(type);
      r.push(val);
    }
  }
  return r;
}
Salin selepas log masuk
3). Kaedah penilaian indeks tatasusunan

masih perlu memanggil "indexOf". tatasusunan semasa berada dalam tatasusunan semasa Jika kedudukan yang muncul sekali bukan i, ini bermakna item ke-i diulang dan diabaikan. Jika tidak, simpan tatasusunan hasil.

function unique3(array){
 var n = [array[0]]; //结果数组
 //从第二项开始遍历
 for(var i = 1; i < array.length; i++) {
  //如果当前数组的第i项在当前数组中第一次出现的位置不是i,
  //那么表示第i项是重复的,忽略掉。否则存入结果数组
  if (array.indexOf(array[i]) == i) n.push(array[i]);
 }
 return n;
}
Salin selepas log masuk
4). Kaedah penyingkiran bersebelahan selepas pengisihan

Walaupun hasil pengisihan kaedah "isih" tatasusunan asli tidak begitu boleh dipercayai, tiada kelemahan dalam penyahduplikasian yang tidak memberi perhatian kepada pesanan. Idea pelaksanaan: Isih tatasusunan masuk supaya nilai yang sama bersebelahan selepas menyusun, dan kemudian apabila melintasi, hanya tambah nilai yang bukan pendua nilai sebelumnya kepada tatasusunan baharu.

// 将相同的值相邻,然后遍历去除重复值
function unique4(array){
 array.sort();
 var re=[array[0]];
 for(var i = 1; i < array.length; i++){
  if( array[i] !== re[re.length-1])
  {
   re.push(array[i]);
  }
 }
 return re;
}
Salin selepas log masuk
5). Mengoptimumkan kaedah traversal tatasusunan

berasal dari catatan blog asing Kod pelaksanaan kaedah ini agak hebat: dapatkan nilai paling tepat tanpa penduaan ke dalam tatasusunan baharu. (Apabila nilai pendua dikesan, gelung semasa ditamatkan dan pusingan penghakiman seterusnya bagi gelung peringkat atas dimasukkan)

// 思路:获取没重复的最右一值放入新数组
function unique5(array){
 var r = [];
 for(var i = 0, l = array.length; i < l; i++) {
  for(var j = i + 1; j < l; j++)
   if (array[i] === array[j]) j = ++i;
  r.push(array[i]);
 }
 return r;
}
Salin selepas log masuk
3.

Soalan ini lebih sukar sedikit, dan saya tidak memerlukan pihak lain untuk menjawabnya. Walau bagaimanapun, soalan ini adalah cara cepat untuk menentukan kecekapan teknikal calon: Adakah mereka benar-benar memahami bahasa pengaturcaraan serta mereka mendakwa?
Promosi pembolehubah bermakna tidak kira di mana pembolehubah diisytiharkan dalam skop, enjin JavaScript akan mengalihkan pengisytiharan ini ke bahagian atas skop. Jika anda mengisytiharkan pembolehubah di tengah-tengah fungsi, seperti menetapkan pembolehubah dalam baris tertentu:

function foo()
{
 // 此处省略若干代码
 var a = "abc";
}
Salin selepas log masuk
, kod sebenarnya akan berjalan seperti ini:


function foo()
{
 var a;
 // 此处省略若干代码
 a = "abc";
}
Salin selepas log masuk
4. Apakah risiko pembolehubah global, dan bagaimana saya boleh melindungi kod saya daripada gangguan?

Bahaya dengan pembolehubah global ialah orang lain boleh membuat pembolehubah dengan nama yang sama dan kemudian menulis ganti pembolehubah yang anda gunakan. Ini adalah sakit kepala dalam mana-mana bahasa.
Terdapat banyak cara untuk mencegahnya. Kaedah yang paling biasa adalah untuk mencipta pembolehubah global yang mengandungi semua pembolehubah lain:
var applicationName = {};
Kemudian, apabila anda perlu mencipta pembolehubah global, hanya lampirkan pada objek.
applicationName.myVariable = "abc";
Kaedah lain ialah merangkum semua kod ke dalam fungsi yang dilaksanakan secara automatik, supaya semua pembolehubah yang diisytiharkan diisytiharkan dalam skop fungsi.

(function(){
 var a = "abc";
})();
Salin selepas log masuk

在现实中,这两种方法你可能都会用到。
5.如何通过JavaScript对象中的成员变量迭代?

for(var prop in obj){
 // bonus points for hasOwnProperty
 if(obj.hasOwnProperty(prop)){
  // do something here
 }
}
Salin selepas log masuk

6.什么是闭包(Closure)?
闭包允许一个函数定义在另一个外部函数的作用域内,即便作用域内的其他东西都消失了,它仍可以访问该外部函数内的变量。如果应聘者能够说明,在for/next循环中使用闭包却不声明变量来保存迭代变量当前值的一些风险,那就应该给对方加分。
7.请描述你经历过的JavaScript单元测试。
关于这个问题,其实我们只是想看看应聘人员是否真的做过JavaScript单元测试。这是一个开放式问题,没有特定的正确答案,不过对方至少得能讲述进程中的一些事情。

相关学习推荐:javascript视频教程

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!