基礎知識總結-前端面試(一)


打算寫一個前端面試系列的知識,博客很久沒有進行更新,更新的都是一些的基礎知識。

最近在投簡歷進行面試,說是面試,其實就是一個自己的使用自己大白話的知識概括吧。歡迎感興趣的小伙伴進行學習或者提出建議和改正!

大概計划章節如下

1-1 關於面試題

2-1 變量類型和計算-變量類型

2-2 變量類型和計算-強制類型轉換

2-3 變量計算-理解json

2-4 原型和構造函數-構造函數

2-5 原型和構造函數-原型規則

2-6 原型和構造函數-原型鏈

3-1 作用域和閉包-變量提升

3-2 作用域和閉包-this

3-3 作用域和閉包-作用域

3-4 作用域和閉包-閉包

4-1 異步和單線程-異步

4-2 異步和單線程-單線程

5-1 日期常用API

5-2 數組常用API

5-3 undefined和null

 

1-1 關於面試題

關於面試,雖然我個人還在面試過程當中,但是我有抽空看一點點的題目。我覺得認為萬變不離其宗,基礎知識把握好,題目做起來就不會錯得那么難看哈哈哈。

看到題目,1:看考點;2:知識點;3:擴展;

 

2-1 變量類型和計算-變量類型(按存儲方式區分類型)

變量類型分為:值類型和引用類型

基本數據類型(值類型)分為:undefined,null,number,boolean,string.

引用類型分為:對象、數組、函數等

兩者之間的區別在於:值類型每個變量的儲存各自的值不會相互影響,不可以添加屬性和方法。而引用類型剛好相反

 

值類型簡單代碼演示

var a = 100;
var b = a;
a = 200;
console.log(b)//100

引用類型代碼演示

var a = {age:20};//a賦值對象
var b = a;//b的指針指向a
b.age = 21;
console.log(a.age)//21

使用typeof可以進行檢測值類型和函數,但是引用類型的對象數組區分不出來,也可以用instanceof指定類型對象來檢測

推薦文章:https://segmentfault.com/a/1190000008472264

 

 2-2 變量類型和計算-強制類型轉換變量的計算會導致類型的強制轉換

變量的計算大概有以下幾種:

1、字符串的拼接:

以下代碼輸出的結果是什么

console.log(1+'2'+'2');//122
console.log(1++'2'+'2');//1++'2'變成1+2,等於3拼接成為32
console.log('A'-'B'+'2');//NAN加上拼接的字符2  結果為NAN2
console.log('A'-'B'+2);//前面是NAN,后面是加法運算+2。運算操作中其中一個為NAN則整體為NAN

 

2、== 運算符

什么時候用==,什么時候用===

==值相等,===完全相等(包括類型);

if (obj.a==null){
  //相當於obj.a==null||obj.a===undefined的簡寫形式
  //這個是jquery源碼推薦的寫法    
}

 

3、if語句

var b = 100;
if(b){
//此處的b強制轉換成布爾類型
}

 

4、邏輯運算符號

console.log(10&&0);//0;
console.log("||'abc'");//||'abc';
console.log(!window.abc);//true;
var a = 100;
console.log(!!a);//兩個!!則是true

 

2-3 變量計算-理解json

json在js中是對象和數組,常用的json就是將json轉換成字符串,字符串轉換成對象。

json是一種數據交換的文本格式,目的是取代繁重的xml

json常用Api:

json.stringify({a:10,b:20}); //json轉換成字符串
json.parse('{"a":10,"b":20}') //字符串轉換成json

推薦文章:http://blog.csdn.net/qq_32528231/article/details/52783210

 

2-4 原型和構造函數-構造函數

 什么是構造函數?

普通函數要創建一類對象時,就被稱為構造函數,也叫構造器。new fn()的形式創建,new對象的過程也克隆了obj.prototype對象

function Foo(){
//建議構造函數首字母大寫
  this.name = 20;  
}
var Foo2 = new Foo;
console.log(Foo2.name);//20

 

函數的創建方式

fn();//不報錯
function fn(){
  //函數聲明式,定義在哪都能調用
}

fn1();//報錯
var fn1 = function(){
  //函數表達式,繼承的是變量,調用只能在定義后面
}

 

2-5 原型和構造函數(constructor)-原型規則

1、所有引用類型,_proto_屬性值指向它的構造函數的prototype屬性值:

obj._proto_ === object.prototype;

Fn.prototype.constructor === Fn:

instanceof方法可以判斷引用類型屬於哪個構造函數的方法,判斷變量是否是數組類型。

2、可擴展性

推薦文章:https://www.cnblogs.com/pompey/p/6675559.html

極力推薦,配合文章中的代碼實戰更為清晰

 

2-6 原型和構造函數-原型鏈

原型鏈:是一種行為委托機制。

配合__proto__指向的鏈路從下往上尋找,找不到就是unefined

一個原型鏈繼承的例子。【注意修改id,此處演示id為div1】

function Elem(id){
  this.elem =  document.getElementById(id)
};
Elem.prototype.html = function(val){
  var elem = this.elem;
  if (val){
    elem.innerHTML = val;
    return this;  
  }else {
      return elem.innerHTML
  }
}
var div1 = new Elem('div1');
div1.html('<p> hello </p>');

 

new 一個對象的過程

創建、this指向、執行對this賦值、返回this

 

3-1 作用域和閉包-變量提升

一個變量,在局部作用域的級別優先於全局作用域

自由變量:即當前作用域沒有定義的變量

var a = 250;
function fn(){
  var b = 100;
  console.log(a);//自由變量
  console.log(b);
}
fn();
//250
//100

換一種情況

var a = 250;
function fn(){
 
  console.log(a);//自由變量,變量在局部得到提升,還未賦值狀態
  var a = 100;//得到提升 
  console.log(a);
}
fn();
//undefined
//100

以上另一種情況的代碼演示,就叫做提升自由變量

 

 

3-2 作用域和閉包-this

this在執行時才能確認值,定義時無法確認

擴展認識:

call、apply、bind綁定this指向。這其中最常用的是call

function fn1(name,age){
  alert(name);
  console.log(this);
}

fn1.call({x:100},'zhangsan',20);
//彈出“zhangsan”
//this指向{x: 100}

 

 

3-3 作用域和閉包-作用域

分為局部作用域和全局作用域。局部同名變量優先級高於同名全局變量。js沒有塊級作用域

作用域鏈:自由變量從下往上往父類進行查找是否存在這個屬性。這個一整個的過程就是作用域鏈

 

3-4 作用域和閉包-閉包

內部函數能引用外部函數中的變量,和作用域鏈密不可分,存儲私有屬性,封裝變量。

 

 

4-1 異步和單線程-異步

js是單線程,異步和單線程是相輔相成的。

單線程就意味着不能同時做兩件事,而同步會阻塞代碼的運行,所以只能排隊。而異步就是個插隊的。

什么時候會用到異步?

需要進行耗時較長的操作都會用到異步。比如網絡請求ajax、動態<img>加載等

 

 

4-2 異步和單線程-單線程

單線程一次只能完成一件事,其余的任務都得排隊按順序完成,前一個完成了才能進行下一個

 

5-1 日期常用API

getTime();//毫秒數
getFullYear();//
getMonth();//月 (0~11)要+1
getDate();//
getHours();//小時
getMinutes();//分鍾
getSeconds();//

Date.now();//當前時間毫秒數
new Date();//當前時間

 

5-2數組常用API

forEach:遍歷
every:判斷所有元素是否都符合條件
some:判斷是否至少有一個元素符合條件
map:重新組裝數組元素
filter:過濾符合條件的元素
sort:排序(從小到大、從大到小)

 

 

5-3 undefined和null

    var a = undefined;
    var b = null;
    a == b;//true
    a === b;//true

以上代碼顯示出null和undefined的行為非常相似

但是根據用法來說

null表示“沒有對象“的意思,就是此處不應該有值

undefined表示”缺少值“,就是此處應該有值,但是還沒有定義

 

null常用情況

作為參數,表示這個參數不是對象

作為原型鏈的終點

 

undefined常用情況

變量聲明了,沒有賦值

調用函數時,沒有提供該有的參數,該參數為undefined

對象沒賦值屬性,屬性值為undefined

函數沒返回值時,默認返回undefined

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM