js
JavaScript 有幾種類型的值?,你能畫一下他們的內存圖嗎
- 原始數據類型(Undefined,Null,Boolean,Number、String)-- 棧
- 引用數據類型(對象、數組和函數)-- 堆
- 兩種類型的區別是:存儲位置不同:
- 原始數據類型是直接存儲在棧(stack)中的簡單數據段,占據空間小、大小固定,屬于被頻繁使用數據;
- 引用數據類型存儲在堆(heap)中的對象,占據空間大、大小不固定,如果存儲在棧中,將會影響程序運行的性能;
- 引用數據類型在棧中存儲了指針,該指針指向堆中該實體的起始地址。
- 當解釋器尋找引用值時,會首先檢索其在棧中的地址,取得地址后從堆中獲得實體。
assign
array.from
介紹JS有哪些內置對象
- 數據封裝類對象: String Number Boolean Array Object
- 其他對象: Function Math Date Error Arguments RegExp
string number boolean undefined null
dom 事件模型
- 冒泡 捕獲
dom 事件流
- 事件捕獲的流程
dom 事件級別
- dom 0 onclick
- dom2 addEventListener Ie attatchEvent
- dom 3 keyup 鼠標
捕獲的流程 window —>document
如何獲取body 對象,如何獲取html對象
html 節點document.documentElement
null、undefined及未聲明變量之間的區別。如何區分?
- 未聲明變量默認值為undefined
- typeof null === 'object' // true
- typeof undefined === 'undefined' // true
==和===的區別
- ==比較之前會先進行類型轉換,即不會對類型進行比較。例如:
12 == '12' // true - true == 1 // true
- false == '0' // true
- 復制代碼
- ===會比較數值和類型。例如:
12 === '12' // false - 12 === 12 // true
- true === 1 // false
- false === '0' // false
- 復制代碼
如何注冊事件
怎么自定義事件
call,apply和bind的作用是什么?兩者區別是什么?
.call和.apply都用于調用函數,第一個參數將用作函數內 this 的值。然而,.call接受逗號分隔的參數作為后面的參數,而.apply接受一個參數數組作為后面的參數。一個簡單的記憶方法是,從call中的 C 聯想到逗號分隔(comma-separated),從apply中的 A 聯想到數組(array)。
function add(a, b) {
return a + b;
}
console.log(add.call(null, 1, 2)); // 3
console.log(add.apply(null, [1, 2])); // 3
復制代碼
.call和.apply是立即執行的, .bind 返回函數的副本
創建對象幾種方法
1 字面量對象new object 傳參 2 構造函數 new 3 Object.create
什么原型
什么是構造函數
什么是示例
什么是原型鏈
function onLoad() {
var arr = document.getElementsByTagName("p");
for (var i = 0; i < arr.length; i++) {
arr[i].onclick = function () {
alert(i);
}
}
}
函數節流
函數防抖
什么是函數節流?介紹一下應用場景和原理?
- 函數節流(throttle)是指阻止一個函數在很短時間間隔內連續調用。 只有當上一次函數執行后達到規定的時間間隔,才能進行下一次調用。 但要保證一個累計最小調用間隔(否則拖拽類的節流都將無連續效果)
- 函數節流用于 onresize, onscroll 等短時間內會多次觸發的事件
- 函數節流的原理:使用定時器做時間節流。 當觸發一個事件時,先用 setTimout 讓這個事件延遲一小段時間再執行。 如果在這個時間間隔內又觸發了事件,就 clearTimeout 原來的定時器, 再 setTimeout 一個新的定時器重復以上流程。
instanceOf 的原理
new 運算符
聲明一個對象
箭頭函數需要注意的地方
*當要求動態上下文的時候,就不能夠使用箭頭函數,也就是this的固定化。
1、在使用=>定義函數的時候,this的指向是定義時所在的對象,而不是使用時所在的對象;
2、不能夠用作構造函數,這就是說,不能夠使用new命令,否則就會拋出一個錯誤;
3、不能夠使用arguments對象;
4、不能使用yield命令;
let和const
手寫一個promise
var promise = new Promise((resolve, reject) => {
if (操作成功) {
resolve(value)
} else {
reject(error)
}
})
promise.then(function (value) {
// success
}, function (value) {
// failure
})
promise 有幾個狀態?
promise有2個狀態,成功和失敗,怎么讓一個函數無論成功還是失敗都能被調用?
Promise.prototype.finally()
錯誤監控
service-worker
浙公網安備 33010602011771號