搜尋
首頁web前端js教程7個去偽存真的JavaScript面試題

7個去偽存真的JavaScript面試題

May 16, 2016 pm 03:21 PM
javascript面試題

7個去偽存真的JavaScript面試題

下面這7個JavaScript面試問題是你應該在面試前先問的。否則,很有可能會浪費你的時間。
1.建立JavaScript物件的兩種方法是什麼?
這是一個非常簡單的問題,如果你用過JavaScript的話。你至少得知道一種方法。但是,儘管如此,根據我的經驗,也有很多自稱是JavaScript程式設計師的人說不知道如何回答這個問題。

  • 使用「new」關鍵字來呼叫函數。

  • open/close花括號。

var o = {};
你也可以繼續提問,「使用new關鍵字,在什麼情況下創建物件?」但是,由於我只是想淘汰一些人,所以這些問題我會等到真正面試的時候去問。

推薦相關文章2020年最全js面試題目整理(最新)

2.如何建立數組?
這和「如何建立物件」是相同程度的問題。然而,也有一些人回答得了第一個問題,卻無法回答這個問題。
用下面的程式碼,簡單單就能建立一個陣列:
var myArray = new Array();
建立陣列是一個很複雜的過程。但是我希望能從應徵者口中聽到使用方括號的答案。
var myArray = [];
當然,我們還可以繼續問其他問題,例如如何有效地刪除JavaScript數組中的重複元素等,但是由於我們只需要知道應徵人員是否值得進一步的觀察,關於數組的問題我會到此結束。

再來針對如何有效率地刪除JavaScript陣列中的重複元素說一說:js 如何實作陣列去重整理出5種方法。

具體的方法介紹:
1).遍歷數組法
最簡單的去重方法, 實現思路:新建一新數組,遍歷傳入數組,值不在新數組就加入該新數組中;注意點:判斷值是否在數組的方法“indexOf”是ECMAScript5 方法,IE8以下不支持,需多寫一些兼容低版本瀏覽器代碼,源碼如下:

// 最简单数组去重法
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;
 }
}

2).物件鍵值對法
該方法執行的速度比其他任何方法都快, 就是佔用的內存大一些;實現思路:新建一js對像以及新數組,遍歷傳入數組時,判斷值是否為js物件的鍵,不是的話給物件新增該鍵並放入新陣列。注意點: 判斷是否為js物件鍵時,會自動對傳入的鍵執行“toString()”,不同的鍵可能會被誤認為一樣;例如: a[1]、a["1"] 。解決上述問題還是得呼叫「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;
}

3).陣列下標判斷法
還是得呼叫「indexOf」效能跟方法1差不多,實現思路:如果目前陣列的第i項在目前陣列中第一次出現的位置不是i,那麼表示第i項是重複的,忽略掉。否則存入結果數組。

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;
}

4).排序後相鄰去除法
雖然原生數組的」sort」方法排序結果不太可靠,但在不注重順序的去重裡該缺點無影響。實現想法:將傳入數組排序,排序後相同值相鄰,然後遍歷時新數組只加入不與前一值重複的值。

// 将相同的值相邻,然后遍历去除重复值
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;
}

5).最佳化遍歷數組法
源自外國博文,該方法的實現代碼相當酷炫;實現思路:獲取沒重複的最右一值放入新數組。 (偵測到重複值時終止目前循環同時進入頂層循環的下一輪判斷)

// 思路:获取没重复的最右一值放入新数组
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;
}

3.什麼是變數提升(Variable Hoisting)?
這個問題稍微難一點,我也不要求對方一定要回答出來。但是,透過這個問題能夠快速確定應徵者的技術水平:他們是否真的像他們聲明得那樣理解這門程式語言?
變數提升指的是,無論是哪裡的變數在一個範圍內宣告的,那麼JavaScript引擎會將這個宣告移到範圍的頂端。如果在函數中間宣告一個變量,例如在某一行中賦值一個變數:

function foo()
{
 // 此处省略若干代码
 var a = "abc";
}

實際上會這樣運行程式碼:

function foo()
{
 var a;
 // 此处省略若干代码
 a = "abc";
}

4.全域變數有什麼風險,以及如何保護程式碼不受干擾?
全域變數的危險之處在於其他人可以建立相同名稱的變量,然後覆寫你正在使用的變數。這在任何語言中都是一個令人頭痛的問題。
預防的方法也有很多。其中最常用的方法是建立一個包含其他所有變數的全域變數:
var applicationName = {};
然後,每當你需要建立一個全域變數的時候,將其附加到物件上即可。
applicationName.myVariable = "abc";
還有一種方法是將所有的程式碼封裝到一個自動執行的函數中,這樣一來,所有宣告的變數都宣告在該函數的範圍內。

(function(){
 var a = "abc";
})();

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

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

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

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

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Java vs JavaScript:開發人員的詳細比較Java vs JavaScript:開發人員的詳細比較May 16, 2025 am 12:01 AM

javaandjavascriptaredistinctlanguages:javaisusedforenterpriseandmobileapps,while javascriptifforInteractiveWebpages.1)JavaisComcompoppored,statieldinglationallyTypted,statilly tater astrunsonjvm.2)

JavaScript數據類型:瀏覽器和nodejs之間是否有區別?JavaScript數據類型:瀏覽器和nodejs之間是否有區別?May 14, 2025 am 12:15 AM

JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScript評論:使用//和 / * * / * / * /JavaScript評論:使用//和 / * * / * / * /May 13, 2025 pm 03:49 PM

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python vs. JavaScript:開發人員的比較分析Python vs. JavaScript:開發人員的比較分析May 09, 2025 am 12:22 AM

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

Python vs. JavaScript:選擇合適的工具Python vs. JavaScript:選擇合適的工具May 08, 2025 am 12:10 AM

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript:了解每個的優勢Python和JavaScript:了解每個的優勢May 06, 2025 am 12:15 AM

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

JavaScript的核心:它是在C還是C上構建的?JavaScript的核心:它是在C還是C上構建的?May 05, 2025 am 12:07 AM

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript應用程序:從前端到後端JavaScript應用程序:從前端到後端May 04, 2025 am 12:12 AM

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)