js面試相關
一,字符串
二,數值
三,函數
(1)函數定義
//函數聲明 function sum(a,b){ return a+b; } //函數表達式 var sum = function(a,b){ return a+b; } //Function構造函數【這也是一個表達式,不建議使用,影響函數解析性能】、 var sum = new Function(‘a‘, ‘b‘, ‘return a+b‘)
(2)匿名函數與閉包
匿名函數:沒有名字的函數
閉包:有權訪問另一個函數作用域內的變量的函數。常見方式就是在一個函數內創建另一個函數。
閉包特點: (1)返回函數中的變量的最後一個值(即return的值) (2)閉包函數會一直留在內存中,直至銷毀 (3)可用於創建私有變量
(3)this對象
this對象是在運行時基於函數的執行環境所決定的。
全局函數:this等於window
當函數作為某個對象的方法被調用的時候,this等於那個對象。
四,數組
五,對象
(1)js對象分類
參考:https://juejin.im/entry/58f85f87b123db006235e938
a,內部對象
Array、Boolean、Date、Function、Global、Math、Number、Object、RegExp、String以及各種錯誤類對象,包括Error、EvalError、RangeError、ReferenceError、SyntaxError和TypeError
b,內置對象: Global, Math
c,宿主對象
包括BOM對象和DOM對象
- BOM 對象:window,location,navigator,screen,history
- DOM 對象:Document,Body,Event,Form,Image,事件對象 event
d,自定義對象
就是開發人員自己定義的對象
六,面向對象
(1)繼承
a,基本原理:利用原型讓一個引用類型繼承另一個引用類型的屬性和方法
b,構造函數,原型,實例的關系
參考鏈接: https://github.com/mqyqingfeng/Blog/issues/2
(1)prototype原型屬性 函數才會有的屬性,prototype屬性是一個指針,指向一個叫原型的對象 (2)原型 每一個js對象(除了null)在創建的時候就會有一個相關聯的對象,叫原型 (3)__proto__ 每一個js對象(除了null)都有的一個屬性,叫__proto__,這個屬性指向該對象的原型 (4)constructor構造器 每個原型都有一個constructor屬性指向關聯的構造函數
function Person(){} var person = new Person(); //下圖為構造函數,原型,實例之間的關系
(c)原型鏈
上圖中形成了一個原型鏈,
person -------__proto__-------Persion.prototype-------__proto__--------Object.prototype
(d)原型搜索機制
當以讀取模式訪問一個實例屬性時,
首先,在實例中搜索該屬性。(搜索person實例)若沒有找到 ↓↓
其次,繼續搜索該實例的原型(搜索Person.prototype),若沒有找到 ↓↓
最後,直到搜索到原型鏈末端(搜索Object.Prototype)
(e)確定原型與實例之間的關系
//instanceof操作符 console.log(person instanceof Person); //true,即person是Persion的實例 console.log(Person instanceof Object); //true //isPrototypeOf()方法 console.log(Person.prototype.isPrototypeOf(person)); //true,即Person.prototype是person的原型 console.log(Object.prototype.isPrototypeOf(Person)); //true
js面試相關