精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

每個前端開發者必會的二十個JavaScript面試題

開發 前端
JavaScript 未聲明變量直接使用會拋出異常:var name is not defined,如果沒有處理異常,代碼就停止運行了。

問題1:JavaScript 中 undefined 和 not defined 的區別

JavaScript 未聲明變量直接使用會拋出異常:var name is not defined,如果沒有處理異常,代碼就停止運行了。
但是,使用typeof undeclared_variable并不會產生異常,會直接返回 undefined

var x; // 聲明 x
console.log(x); //output: undefined
console.log(typeof y); //output: undefined
console.log(z); // 拋出異常: ReferenceError: z is not defined

問題2:下面的代碼輸出什么?

var y = 1;
if (function f(){}) {
    y += typeof f;
}
console.log(y);

正確的答案應該是 1undefined。

JavaScript中if語句求值其實使用eval函數,eval(function f(){}) 返回 function f(){} 也就是 true。

下面我們可以把代碼改造下,變成其等效代碼。

var k = 1;
if (1) {
    eval(function foo(){});
    k += typeof foo;
}
console.log(k);

上面的代碼輸出其實就是 1undefined。為什么那?我們查看下 eval() 說明文檔即可獲得答案

該方法只接受原始字符串作為參數,如果 string 參數不是原始字符串,那么該方法將不作任何改變地返回。

恰恰 function f(){} 語句的返回值是 undefined,所以一切都說通了。

注意上面代碼和以下代碼不同。

var k = 1;
if (1) {
    function foo(){};
    k += typeof foo;
}
console.log(k); // output 1function

問題3:在JavaScript中創建一個真正的private方法有什么缺點?

每一個對象都會創建一個private方法的方法,這樣很耗費內存

觀察下面代碼

var Employee = function (name, company, salary) {
    this.name = name || "";       
    this.company = company || ""; 
    this.salary = salary || 5000; 

    // Private method
    var increaseSalary = function () {
        this.salary = this.salary + 1000;
    };

    // Public method
    this.dispalyIncreasedSalary = function() {
        increaseSlary();
        console.log(this.salary);
    };
};

// Create Employee class object
var emp1 = new Employee("John","Pluto",3000);
// Create Employee class object
var emp2 = new Employee("Merry","Pluto",2000);
// Create Employee class object
var emp3 = new Employee("Ren","Pluto",2500);

在這里 emp1,emp2,emp3都有一個increaseSalary私有方法的副本。

所以我們除非必要,非常不推薦使用私有方法。

問題4:JavaScript中什么是閉包?寫出一個例子

老生常談的問題了,閉包是在一個函數里聲明了另外一個函數,并且這個函數訪問了父函數作用域里的變量。

下面給出一個閉包例子,它訪問了三個域的變量

  • 它自己作用域的變量
  • 父函數作用域的變量
  • 全局作用域的變量
var globalVar = "abc"; 

// Parent self invoking function 
(function outerFunction (outerArg) { // begin of scope outerFunction
    // Variable declared in outerFunction function scope 
    var outerFuncVar = 'x';    
    // Closure self-invoking function 
    (function innerFunction (innerArg) { // begin of scope innerFunction
        // variable declared in innerFunction function scope
        var innerFuncVar = "y"; 
        console.log(          
            "outerArg = " + outerArg + "\n" +
            "outerFuncVar = " + outerFuncVar + "\n" +
            "innerArg = " + innerArg + "\n" +
            "innerFuncVar = " + innerFuncVar + "\n" +
            "globalVar = " + globalVar);

    }// end of scope innerFunction)(5); // Pass 5 as parameter 
}// end of scope outerFunction )(7); // Pass 7 as parameter 
innerFunction is closure that is defined inside outerFunc

輸出很簡單:

outerArg = 7
outerFuncVar = x
innerArg = 5
innerFuncVar = y
globalVar = abc

問題5:寫一個mul函數,使用方法如下。

console.log(mul(2)(3)(4)); // output : 24 
console.log(mul(4)(3)(4)); // output : 48

答案直接給出:

function mul (x) {
    return function (y) { // anonymous function 
        return function (z) { // anonymous function 
            return x * y * z; 
        };
    };
}

簡單說明下: mul 返回一個匿名函數,運行這個匿名函數又返回一個匿名函數,最里面的匿名函數可以訪問 x,y,z 進而算出乘積返回即可。

對于JavaScript中的函數一般可以考察如下知識點:

  • 函數是一等公民
  • 函數可以有屬性,并且能連接到它的構造方法
  • 函數可以像一個變量一樣存在內存中
  • 函數可以當做參數傳給其他函數
  • 函數可以返回其他函數

問題6:JavaScript怎么清空數組?

var arrayList = ['a','b','c','d','e','f'];

怎么清空 arrayList

方法1

arrayList = [];

直接改變arrayList所指向的對象,原對象并不改變。

方法2

arrayList.length = 0;

這種方法通過設置length=0 使原數組清除元素。

方法3

arrayList.splice(0, arrayList.length);

和方法2相似

問題7:怎么判斷一個object是否是數組(array)?

方法1

使用 Object.prototype.toString 來判斷是否是數組

function isArray(obj){
    return Object.prototype.toString.call( obj ) === '[object Array]';
}

這里使用call來使 toString 中 this 指向 obj。進而完成判斷

方法二

使用 原型鏈 來完成判斷

function isArray(obj){
    return obj.__proto__ === Array.prototype;
}

基本思想是利用 實例如果是某個構造函數構造出來的那么 它的 __proto__是指向構造函數的 prototype屬性。

方法3

利用JQuery

function isArray(obj){
    return $.isArray(obj)
}

JQuery isArray 的實現其實就是方法1

問題8:下面代碼輸出什么?

var output = (function(x){
    delete x;
    return x;
})(0);

console.log(output);

輸出是 0。 delete 操作符是將object的屬性刪去的操作。但是這里的 x 是并不是對象的屬性, delete 操作符并不能作用。

問題9:下面代碼輸出什么?

var x = 1;
var output = (function(){
    delete x;
    return x;
})();

console.log(output);

輸出是 1。delete 操作符是將object的屬性刪去的操作。但是這里的 x 是并不是對象的屬性, delete 操作符并不能作用。

問題10:下面代碼輸出什么?

var x = { foo : 1};
var output = (function(){
    delete x.foo;
    return x.foo;
})();

console.log(output);

輸出是 undefined。x雖然是全局變量,但是它是一個object。delete作用在x.foo上,成功的將x.foo刪去。所以返回undefined

問題11:下面代碼輸出什么?

var Employee = {
    company: 'xyz'
}
var emp1 = Object.create(Employee);
delete emp1.company
console.log(emp1.company);

輸出是 xyz,這里的 emp1 通過 prototype 繼承了 Employee的 company。emp1自己并沒有company屬性。所以delete操作符的作用是無效的。

問題12:什么是 undefined x 1 ?

在chrome下執行如下代碼,我們就可以看到undefined x 1的身影。

var trees = ["redwood","bay","cedar","oak","maple"];
delete trees[3];
console.log(trees);

當我們使用 delete 操作符刪除一個數組中的元素,這個元素的位置就會變成一個占位符。打印出來就是undefined x 1。
注意如果我們使用trees[3] === 'undefined × 1'返回的是 false。因為它僅僅是一種打印表示,并不是值變為undefined x 1。

問題13:下面代碼輸出什么?

var trees = ["xyz","xxxx","test","ryan","apple"];
delete trees[3];

console.log(trees.length);

輸出是5。因為delete操作符并不是影響數組的長度。

問題14:下面代碼輸出什么?

var bar = true;
console.log(bar + 0);   
console.log(bar + "xyz");  
console.log(bar + true);  
console.log(bar + false);

輸出是

1
truexyz
2
1

下面給出一個加法操作表

  • Number + Number -> 加法
  • Boolean + Number -> 加法
  • Boolean + Boolean -> 加法
  • Number + String -> 連接
  • String + Boolean -> 連接
  • String + String -> 連接

問題15:下面代碼輸出什么?

var z = 1, y = z = typeof y;
console.log(y);

輸出是 undefined。js中賦值操作結合律是右至左的 ,即從最右邊開始計算值賦值給左邊的變量。

上面代碼等價于

var z = 1
z = typeof y;
var y = z;
console.log(y);

問題16:下面代碼輸出什么?

var foo = function bar(){ return 12; };
typeof bar();

輸出是拋出異常,bar is not defined。如果想讓代碼正常運行,需要這樣修改代碼:

var bar = function(){ return 12; };
typeof bar();

或者是

function bar(){ return 12; };
typeof bar();

明確說明這個下問題

var foo = function bar(){ 
    // foo is visible here 
    // bar is visible here
    console.log(typeof bar()); // Work here : )
};
// foo is visible here
// bar is undefined here

問題17:兩種函數聲明有什么區別?

var foo = function(){ 
    // Some code
}; 
function bar(){ 
    // Some code
};

foo的定義是在運行時。想系統說明這個問題,我們要引入變量提升的這一概念。

我們可以運行下如下代碼看看結果。

console.log(foo)
console.log(bar)

var foo = function(){ 
    // Some code
}; 
function bar(){ 
    // Some code
};

輸出為

undefined
function bar(){ 
    // Some code
};

為什么那?為什么 foo 打印出來是 undefined,而 bar打印出來卻是函數?

JavaScript在執行時,會將變量提升。

所以上面代碼JavaScript 引擎在實際執行時按這個順序執行。

// foo bar的定義位置被提升
function bar(){ 
    // Some code
}; 
var foo;

console.log(foo)
console.log(bar)

foo = function(){ 
    // Some code
};

原代碼的輸出合理解釋了。

問題18:下面代碼輸出什么?

var salary = "1000$";

(function () {
    console.log("Original salary was " + salary);

    var salary = "5000$";

    console.log("My New Salary " + salary);
})();

輸出是

Original salary was undefined
My New Salary 5000$

這題同樣考察的是變量提升。等價于以下代碼

var salary = "1000$";

 (function () {
     var salary ;
     console.log("Original salary was " + salary);

     salary = "5000$";

     console.log("My New Salary " + salary);
 })();

問題19:什么是 instanceof 操作符?下面代碼輸出什么?

function foo(){ 
  return foo; 
}

console.log(new foo() instanceof foo);

instanceof操作符用來判斷是否當前對象是特定類的對象。

function Animal(){
    //或者不寫return語句
    return this;
}
var dog = new Animal();
dog instanceof Animal // Output : true

但是,這里的foo定義為

function foo(){ 
  return foo; 
}

所以

// here bar is pointer to function foo(){return foo}.
var bar = new foo();

所以 new foo() instanceof foo 返回 false

問題20: 如果我們使用JavaScript的”關聯數組”,我們怎么計算”關聯數組”的長度?

var counterArray = {
    A : 3,
    B : 4
};
counterArray["C"] = 1;

其實答案很簡單,直接計算key的數量就可以了。

Object.keys(counterArray).length // Output 3

面試題參考自: 21 Essential JavaScript Interview Questions | Codementor

本文給出的面試題答案只是很多合理答案中的幾個,可能會不全面,歡迎大家補充。

由于個人疏忽等原因,本文中難免會存在少量錯誤,歡迎大家批評指正。

責任編輯:張燕妮 來源: Shelley
相關推薦

2015-07-31 09:34:44

Java面試題

2022-10-20 15:12:43

JavaScript技巧開發

2023-11-08 18:01:53

硬重置Git命令

2022-04-27 09:48:56

JS前端開發

2015-07-23 14:13:43

前端開發面試題

2024-02-26 15:35:44

2019-02-21 13:40:35

Javascript面試前端

2022-01-23 11:12:29

前端開發編碼開發

2022-04-26 18:33:02

JavaScript技巧代碼

2020-11-05 09:17:11

JavaScript開發 技術

2023-06-27 07:55:03

前端開發工具

2023-08-10 08:31:53

工具實用網站

2014-07-07 09:44:05

前端前端渲染

2022-05-31 17:36:25

技術面試編程

2025-01-09 12:00:00

JavaScript前端數組

2022-06-27 09:14:34

JavaScript閉包代碼

2023-05-10 07:15:22

Nacos管理工具配置

2019-07-18 10:14:32

前端Javascript圖表庫

2013-01-05 14:51:34

JavaScriptjQuery面試

2024-06-04 14:52:28

點贊
收藏

51CTO技術棧公眾號

亚洲乱码国产乱码精品精可以看| 日日欢夜夜爽一区| 亚洲护士老师的毛茸茸最新章节 | 欧美电影三区| 欧美成人一区二区| 国产亚洲精品网站| 日韩在线观看www| 成人黄色av网站在线| 国产精品久久久久久一区二区 | 狠狠躁18三区二区一区| 亚洲乱码一区二区三区| 熟妇人妻系列aⅴ无码专区友真希 熟妇人妻av无码一区二区三区 | 国产精品免费精品自在线观看| 亚洲成av人影院| 午夜老司机精品| 日本美女一级视频| 狠狠色丁香久久婷婷综合_中| 91精品国产91久久久久福利| 精品国产精品国产精品| 一区三区在线欧| 日韩精品一区二区在线| 亚洲欧洲日本精品| 成人性教育av免费网址| 亚洲精品视频一区| 婷婷久久青草热一区二区 | 国产一区二区三区在线视频 | 久久精品视频在线看| 国产女人水真多18毛片18精品| 一级特黄aa大片| 久久三级视频| 奇米一区二区三区四区久久| 欧美黄片一区二区三区| 99久久精品费精品国产| 国产亚洲精品一区二555| 三级电影在线看| 国产精伦一区二区三区| 欧美一区二区成人| 91视频这里只有精品| 国产精品亚洲d| 欧美天堂在线观看| 日本精品免费在线观看| www视频在线观看| 亚洲成人精品一区| 国产又粗又猛又爽又黄的网站| 国产在线一区二区视频| 亚洲欧洲www| 伊人久久av导航| 91官网在线| 国产视频一区二区在线| 欧美久久综合性欧美| 四虎影视在线播放| 成人综合婷婷国产精品久久免费| 成人xxxxx色| 蜜桃av噜噜一区二区三区麻豆| 国产98色在线|日韩| 99视频免费观看| 亚洲第一天堂影院| 成人精品在线视频观看| 精品国产一二| 青青青手机在线视频观看| 97se亚洲国产综合自在线不卡| 精品国产一区二区三区免费| 日本大片在线观看| 久久亚洲一级片| 视频一区视频二区视频三区高| 激情福利在线| 国产精品人成在线观看免费| 先锋影音男人资源| 国产99re66在线视频| 亚洲成a人片在线不卡一二三区| 亚洲 欧美 日韩 国产综合 在线| 日韩脚交footjobhdboots| 狠狠躁夜夜躁人人爽超碰91| 麻豆传传媒久久久爱| 精品176极品一区| 日韩免费观看高清完整版在线观看| 日韩精品国产一区| 美女网站一区| 久久精品男人天堂| 中文字幕一区二区三区手机版 | 国产精品露脸自拍| 国产精品久久影视| 成人美女在线观看| 日韩黄色影视| av激情在线| 色偷偷88欧美精品久久久| 性刺激的欧美三级视频| 香蕉大人久久国产成人av| 日韩av在线不卡| 精品国产大片大片大片| 国自产拍偷拍福利精品免费一| 欧美一级在线亚洲天堂| 伊人网av在线| 波多野结衣亚洲一区| 日韩欧美视频一区二区三区四区| 最新黄网在线观看| 在线亚洲一区观看| 最新日本中文字幕| 青青草91久久久久久久久| 久久久久久久999| 中文字幕一区二区三区波野结| 国产91精品欧美| 日韩精品福利视频| 国产精品探花在线| 欧美日韩一级视频| 黄色网址在线视频| 亚洲欧美在线专区| 国产成人自拍视频在线观看| www.色亚洲| 国产精品久久久久永久免费观看| 欧美午夜性视频| 成人国产精品久久| 国产一区二区三区丝袜| 日韩精品无码一区二区| 激情综合色综合久久综合| 麻豆亚洲一区| 三级资源在线| 欧美久久高跟鞋激| 69精品无码成人久久久久久| 在线观看亚洲| 99re热精品| 色欧美激情视频在线| 色婷婷综合激情| 国产成人精品无码片区在线| 亚洲欧洲中文字幕| 91精品免费看| 亚洲1卡2卡3卡4卡乱码精品| 色婷婷一区二区三区四区| 欧美肉大捧一进一出免费视频| 欧美一区综合| 成人伊人精品色xxxx视频| av影片免费在线观看| 日本黄色一区二区| 泷泽萝拉在线播放| 国产欧美日韩一区二区三区在线| 成人免费在线看片| 亚洲大胆人体大胆做受1| 91麻豆精品久久久久蜜臀 | 亚洲国产一区二区三区| 亚洲精品乱码久久久久久动漫| 日韩在线高清| 国产乱肥老妇国产一区二| 国产在线视频网址| 91久久免费观看| 亚洲av片不卡无码久久| 欧美一级专区| 日韩av高清| 日韩经典一区| www.欧美三级电影.com| 一区二区日韩在线观看| 国产精品女上位| 亚洲免费黄色录像| 亚洲第一偷拍| 999视频在线观看| 久久99亚洲网美利坚合众国| 欧美岛国在线观看| 国产精品第72页| 久久综合九色综合97婷婷女人 | 日韩在线欧美在线国产在线| 中国女人真人一级毛片| 中文字幕乱码亚洲精品一区| 视频免费1区二区三区| 天天综合亚洲| 成人黄视频免费| 日韩精品av| 在线成人激情视频| 国产日韩欧美中文字幕| 亚洲韩国精品一区| 精品少妇人妻一区二区黑料社区 | 国产精品第三页| 777电影在线观看| 日韩午夜电影av| 亚洲精品午夜国产va久久成人| 久久久久久久综合| 久久精品久久99| 夜夜爽av福利精品导航| 日韩高清三级| 99久热这里只有精品视频免费观看| 久久全国免费视频| 国产午夜在线视频| 日韩亚洲欧美在线| 男人天堂2024| 亚洲同性gay激情无套| 中文字幕精品视频在线| 美女爽到高潮91| 18禁裸男晨勃露j毛免费观看| 亚洲色图美女| 91亚洲精品在线观看| 欧美少妇网站| 久久久精品国产一区二区| 免费看黄色一级视频| 欧美亚洲日本一区| 国产乡下妇女做爰| 国产午夜精品久久久久久久| 麻豆传媒在线看| 日韩黄色在线观看| 国产精品国产亚洲精品看不卡| 第一会所亚洲原创| 国产一区二区三区无遮挡 | 久久久久91| 国产资源第一页| 成人羞羞视频播放网站| 国产精品v欧美精品∨日韩| 欧美日韩激情电影| 欧美日韩国产二区| 日韩黄色影院| 亚洲人成电影网站| 天堂av手机版| 4438亚洲最大| 中文在线免费看视频| 午夜精品影院在线观看| 一起操在线播放| 中文字幕免费不卡| 草草影院第一页| 东方欧美亚洲色图在线| 欧美成人乱码一二三四区免费| 亚洲欧美日韩一区在线观看| 欧美一级中文字幕| 91精品电影| 影音先锋在线亚洲| 欧美伦理在线视频| 欧美一区2区三区4区公司二百| 国产精品色在线网站| 91情侣偷在线精品国产| 玖玖精品在线| 国产精品入口免费视频一| 蜜桃视频动漫在线播放| 97久久久久久| 久久免费电影| 午夜精品一区二区三区在线视频| a免费在线观看| 久久天天躁狠狠躁老女人| 9色在线视频网站| 一区二区三区国产在线观看| 蝌蚪视频在线播放| 亚洲欧美精品一区二区| 免费a在线观看| 亚洲欧美视频在线| 男人的天堂av高清在线| 亚洲女人被黑人巨大进入al| 视频在线不卡| 国产网站欧美日韩免费精品在线观看| 亚洲爆乳无码一区二区三区| 日韩精品一区二区三区视频播放| a级片在线视频| 欧美一级二级三级蜜桃| 精品人妻一区二区三区浪潮在线| 欧美一区二区啪啪| 久久久999精品视频| av资源网站在线观看| 亚洲日韩中文字幕| 国产日韩精品在线看| 亚洲人a成www在线影院| www.亚洲.com| 久久精品小视频| 永久免费网站在线| 久久久久久国产精品久久| free性m.freesex欧美| 91av视频在线播放| 久久野战av| 国产欧亚日韩视频| 免费观看性欧美大片无片| 成人av资源| 综合亚洲自拍| 亚洲视频小说| 91精品亚洲| 国产原创中文在线观看| 三级精品在线观看| 狠狠干狠狠操视频| 成人福利视频在线看| 国产色视频一区二区三区qq号| 国产视频一区不卡| www.色小姐com| 欧美日韩亚洲视频| 在线观看免费观看在线| 日韩一区二区影院| 亚洲欧美自偷自拍| 在线观看亚洲区| 污片在线免费观看| 人妖精品videosex性欧美| 福利一区二区免费视频| 99re在线视频观看| 精品在线播放| 亚洲高潮无码久久| 一区二区三区国产盗摄| 最新中文字幕2018| 国产成人超碰人人澡人人澡| 日本黄色特级片| 青草视频在线免费直播| 欧美成人一二三| 欧美激情网站| 91免费精品国偷自产在线| 欧美日韩看看2015永久免费| 亚洲最大色综合成人av| 国产视频久久| 日本一二三区在线| 国产片一区二区| 日本熟妇成熟毛茸茸| 欧美视频三区在线播放| 蜜桃视频久久一区免费观看入口| 中文字幕亚洲一区二区三区五十路| 在线视频观看国产| 国产精品美女www爽爽爽视频| jazzjazz国产精品麻豆| 中文字幕免费在线不卡| 国产欧美一区二区色老头| 男男受被啪到高潮自述| 国产亚洲精品资源在线26u| 成人免费看片98| 欧美伦理视频网站| 国产一级免费在线观看| 隔壁老王国产在线精品| 97精品资源在线观看| 奇米888一区二区三区| 亚洲神马久久| 亚洲精品鲁一鲁一区二区三区| 国产精品久久久久aaaa樱花| 成年人av网站| 日韩成人中文字幕在线观看| 日韩av官网| 亚洲aa在线观看| 99精品网站| 亚洲黄色小视频在线观看| 久久伊人中文字幕| 久久草视频在线| 精品播放一区二区| 在线视频国产区| 97人人做人人人难人人做| 天天做天天爱天天爽综合网| 五月婷婷六月丁香激情| 国产亚洲精品bt天堂精选| 成人精品免费在线观看| 亚洲国产成人在线播放| 黑人另类精品××××性爽| 91av一区二区三区| 欧美一区网站| 欧美69精品久久久久久不卡| 亚洲精品福利视频网站| 国产视频手机在线观看| 欧美精品亚州精品| 亚洲精品a区| 国产精品久久久久久久久电影网| 国产一二三精品| 国产午夜手机精彩视频| 91精品国产综合久久福利软件| 黄色网页在线观看| 成人免费高清完整版在线观看| 亚洲精品一区二区在线看| 中文字幕一区久久| 亚洲蜜桃精久久久久久久| 国产黄色美女视频| 欧美精品videosex极品1| 一级毛片精品毛片| 男的插女的下面视频| 99re热这里只有精品免费视频| 日产精品久久久| 中日韩美女免费视频网站在线观看 | 国产精品对白交换视频| 夜夜躁狠狠躁日日躁av| 久久精品亚洲一区| 日韩第一区第二区| 国产va亚洲va在线va| 久久先锋影音av鲁色资源网| 波多野结衣激情视频| 色小说视频一区| 久久丁香四色| 男人的天堂狠狠干| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 婷婷综合亚洲| 中文字幕99页| 欧美日韩一区二区精品| 成年人在线视频| 91青青草免费在线看| 国产精品五区| 日韩精品123区| 亚洲国产精品人久久电影| free欧美| 在线观看17c| xnxx国产精品| 国产精品无码久久av| 97在线视频一区| 97精品国产福利一区二区三区| 91精品人妻一区二区三区四区| 偷拍日韩校园综合在线| av在线女优影院| 国产精品福利视频| 日韩黄色小视频| 国产在线拍揄自揄拍无码视频| 亚洲欧美资源在线| 日本高清久久| 亚洲一区二区三区四区五区xx| 亚洲精品免费播放| 日韩欧美在线番号| 亚洲精品日韩av| 美女精品在线观看| 免费在线一级片| 伊人久久久久久久久久久| 超碰成人福利| 日本黄大片一区二区三区| 精品国产1区2区|