教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

傳智播客整理的web前端JavaScript面試試題(附答案)

更新時(shí)間:2018年11月26日13時(shí)43分 來(lái)源:傳智播客 瀏覽次數(shù):

傳智播客整理的web前端JavaScript面試試題(附答案)

javascript面試指南

1.介紹js的基本數(shù)據(jù)類(lèi)型

Undefined、Null、Boolean、Number、String、ECMAScript 2015 新增:Symbol(創(chuàng)建后獨(dú)一無(wú)二且不可變的數(shù)據(jù)類(lèi)型 )

2.介紹js有哪些內(nèi)置對(duì)象?

Object 是 JavaScript 中所有對(duì)象的父對(duì)象

數(shù)據(jù)封裝類(lèi)對(duì)象:Object、Array、Boolean、Number 和 String

其他對(duì)象:Function、Arguments、Math、Date、RegExp、Error

3.說(shuō)幾條寫(xiě)JavaScript的基本規(guī)范?

(1)不要在同一行聲明多個(gè)變量。

(2)請(qǐng)使用 ===/!==來(lái)比較true/false或者數(shù)值

(3)使用對(duì)象字面量替代new Array這種形式

(4)不要使用全局函數(shù)。

(5)Switch語(yǔ)句必須帶有default分支

(6)函數(shù)不應(yīng)該有時(shí)候有返回值,有時(shí)候沒(méi)有返回值。

(7)For循環(huán)必須使用大括號(hào)

(8)If語(yǔ)句必須使用大括號(hào)

(9)for-in循環(huán)中的變量 應(yīng)該使用var關(guān)鍵字明確限定作用域,從而避免作用域污染。

4.JavaScript原型.原型鏈 ? 有什么特點(diǎn)?

每個(gè)對(duì)象都會(huì)在其內(nèi)部初始化一個(gè)屬性,就是prototype(原型),當(dāng)我們?cè)L問(wèn)一個(gè)對(duì)象的屬性時(shí),

如果這個(gè)對(duì)象內(nèi)部不存在這個(gè)屬性,那么他就會(huì)去prototype里找這個(gè)屬性,這個(gè)prototype又會(huì)有自己的prototype,

于是就這樣一直找下去,也就是我們平時(shí)所說(shuō)的原型鏈的概念。

關(guān)系:instance.constructor.prototype = instance.__proto__

特點(diǎn):

JavaScript對(duì)象是通過(guò)引用來(lái)傳遞的,我們創(chuàng)建的每個(gè)新對(duì)象實(shí)體中并沒(méi)有一份屬于自己的原型副本。當(dāng)我們修改原型時(shí),與之相關(guān)的對(duì)象也會(huì)繼承這一改變。

當(dāng)我們需要一個(gè)屬性的時(shí),Javascript引擎會(huì)先看當(dāng)前對(duì)象中是否有這個(gè)屬性, 如果沒(méi)有的話(huà),

就會(huì)查找他的Prototype對(duì)象是否有這個(gè)屬性,如此遞推下去,一直檢索到 Object 內(nèi)建對(duì)象。

function Func(){}

Func.prototype.name = "Sean";

Func.prototype.getInfo = function() {

return this.name;

}

var person = new Func();//現(xiàn)在可以參考var person = Object.create(oldObject);

console.log(person.getInfo());//它擁有了Func的屬性和方法

//"Sean"

console.log(Func.prototype);

// Func { name="Sean", getInfo=function()}

5.JavaScript有幾種類(lèi)型的值?,你能畫(huà)一下他們的內(nèi)存圖嗎?

棧:原始數(shù)據(jù)類(lèi)型(Undefined,Null,Boolean,Number、String)

堆:引用數(shù)據(jù)類(lèi)型(對(duì)象、數(shù)組和函數(shù))

兩種類(lèi)型的區(qū)別是:存儲(chǔ)位置不同;

原始數(shù)據(jù)類(lèi)型直接存儲(chǔ)在棧(stack)中的簡(jiǎn)單數(shù)據(jù)段,占據(jù)空間小、大小固定,屬于被頻繁使用數(shù)據(jù),所以放入棧中存儲(chǔ);

引用數(shù)據(jù)類(lèi)型存儲(chǔ)在堆(heap)中的對(duì)象,占據(jù)空間大、大小不固定。如果存儲(chǔ)在棧中,將會(huì)影響程序運(yùn)行的性能;引用數(shù)據(jù)類(lèi)型在棧中存儲(chǔ)了指針,該指針指向堆中該實(shí)體的起始地址。當(dāng)解釋器尋找引用值時(shí),會(huì)首先檢索其在棧中的地址,取得地址后從堆中獲得實(shí)體。

如何將字符串轉(zhuǎn)化為數(shù)字,例如'12.3b'?

* parseFloat('12.3b');

* 正則表達(dá)式,'12.3b'.match(/(\d)+(\.)?(\d)+/g)[0] * 1, 但是這個(gè)不太靠譜,提供一種思路而已。

如何將浮點(diǎn)數(shù)點(diǎn)左邊的數(shù)每三位添加一個(gè)逗號(hào),如12000000.11轉(zhuǎn)化為『12,000,000.11』?

function commafy(num){

return num && num

.toString()

.replace(/(\d)(?=(\d{3})+\.)/g, function($1, $2){

return $2 + ',';

});

}

如何實(shí)現(xiàn)數(shù)組的隨機(jī)排序?

方法一:

```javascript   var arr = [1,2,3,4,5,6,7,8,9,10];

function randSort1(arr){

for(var i = 0,len = arr.length;i < len; i++ ){

var rand = parseInt(Math.random()*len);

var temp = arr[rand];

arr[rand] = arr[i];

arr[i] = temp;

}

return arr;

}

console.log(randSort1(arr));

```

方法二:

```javascript

var arr = [1,2,3,4,5,6,7,8,9,10];

function randSort2(arr){

var mixedArray = [];

while(arr.length > 0){

var randomIndex = parseInt(Math.random()*arr.length);

mixedArray.push(arr[randomIndex]);

arr.splice(randomIndex, 1);

}

return mixedArray;

}

console.log(randSort2(arr));

```

方法三:

```javascript

var arr = [1,2,3,4,5,6,7,8,9,10];

arr.sort(function(){

return Math.random() - 0.5;

})

console.log(arr);

```


Javascript如何實(shí)現(xiàn)繼承?

1、構(gòu)造繼承

2、原型繼承

3、實(shí)例繼承

4、拷貝繼承

原型prototype機(jī)制或apply和call方法去實(shí)現(xiàn)較簡(jiǎn)單,建議使用構(gòu)造函數(shù)與原型混合方式。

```javascript

function Parent(){

this.name = 'wang';

}

function Child(){

this.age = 28;

}

Child.prototype = new Parent();//繼承了Parent,通過(guò)原型

var demo = new Child();

alert(demo.age);

alert(demo.name);//得到被繼承的屬性

```

上面是傳智播客整理的關(guān)于web前端面試試題部分,希望可以幫到你。

0 分享到:
和我們?cè)诰€(xiàn)交談!