js 數據類型有哪些?
基本數據類型:string、number、boolean、undefined、null、symbol、bigint
引用數據類型:object(Array、Function、RegExp 不是數據類型,是類)
區別:堆棧內存存放位置不同
js 判斷數據類型的方法?
1. typeof(null->object、function->function)
2. instanceof (不能正確判斷基本數據類型)
3. constructor(原型可以更改,不可靠)
4. Object.prototype.toString.call()(返回當前實例所屬類信息 [object Object],需要封裝)
0.1 + 0.2 = ?
0.1 + 0.2 = 0.3...(15個0)...4
js 只有一個數字類型 number,是基於 IEEE 754 的雙精度浮點類型,浮點數計算存在誤差。
如何解決?
1. (0.1*10 + 0.2 * 10)/10
2. ES6 的 Number.EPSILON 定義了一個數字常量,作爲一個誤差範圍值。
什麼是閉包?
閉包是 JavaScript 的一個語法特性
閉包可以用一個公式來概括:閉包 = 函數 + 自由變量
js 變量分爲:全局變量、本地變量、自由變量。自由變量就是非全局變量和本地變量的變量,也可以指其他函數作用域或者塊級作用域內的變量。
上面公式結合自由變量定義再展開說就是:一個函數訪問或者是引用了其他函數作用域或塊級作用域內的變量,這麼一種語法特性就是閉包。
閉包的作用:
1. 封裝私有變量,避免污染全局環境
2. 提供對局部變量的間接訪問
2. 延長變量的生命週期,防止其不被垃圾回收
閉包的缺陷:早期 IE 瀏覽器對閉包內的所有變量都不會進行銷燬,導致內存泄漏,現代瀏覽器基本上不會出現這種問題了。
作用域和作用域鏈是什麼?
作用域:變量的合法使用範圍,JavaScript 採用的是詞法作用域(作用域是由書寫代碼時函數聲明的位置決定)
作用域鏈:
原型和原型鏈是什麼?
js 實現繼承的方式?
函數裏面的 arguments 是什麼?
js 如何判斷數組中是否包含某個值?
什麼是高階函數?
說說 js 的 this?