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

打算寫一個前端面試系列的知識,博客好久沒有進行更新,更新的都是一些的基礎知識。
最近在投簡歷進行面試,說是面試,其實就是一個本身的使用本身大白話的知識歸納吧。歡迎感興趣的小夥伴進行學習或者提出建議和改正!
大概計劃章節以下
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.
引用類型分爲:對象、數組、函數等
二者之間的區別在於:值類型每一個變量的儲存各自的值不會相互影響,不能夠添加屬性和方法。而引用類型恰好相反
 
值類型簡單代碼演示php

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

引用類型代碼演示html

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

使用typeof能夠進行檢測值類型和函數,可是引用類型的對象數組區分不出來,也能夠用instanceof指定類型對象來檢測
推薦文章:https://segmentfault.com/a/11...
 
 2-2 變量類型和計算-強制類型轉換:變量的計算會致使類型的強制轉換
變量的計算大概有如下幾種:
一、字符串的拼接:
如下代碼輸出的結果是什麼前端

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

 
二、== 運算符
何時用==,何時用===
==值相等,===徹底相等(包括類型);jquery

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

 
三、if語句面試

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

 
四、邏輯運算符號ajax

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

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

推薦文章:http://blog.csdn.net/qq_32528...
 
2-4 原型和構造函數-構造函數
 什麼是構造函數?
普通函數要建立一類對象時,就被稱爲構造函數,也叫構造器。new fn()的形式建立,new對象的過程也克隆了obj.prototype對象segmentfault

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

 
函數的建立方式數組

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

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

 
2-5 原型和構造函數(constructor)-原型規則
一、全部引用類型,_proto_屬性值指向它的構造函數的prototype屬性值:
obj._proto_ === object.prototype;
Fn.prototype.constructor === Fn:
instanceof方法能夠判斷引用類型屬於哪一個構造函數的方法,判斷變量是不是數組類型。
二、可擴展性
推薦文章:https://www.cnblogs.com/pompe...
極力推薦,配合文章中的代碼實戰更爲清晰
 
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
 
轉載於猿2048:➨《基礎知識總結-前端面試(一)》

相關文章
相關標籤/搜索