2021-11-30js基礎整理
阿新 • • 發佈:2021-11-30
1.null和undefined的異同點有哪些?
相同點
都是空變數
都是假值,轉布林值都是false
null == undefined 為 true
不同點
typeof判斷null為object,判斷undefined為undefined
null轉數字為0,undefined轉數字為NaN
null是一個物件未初始化,undefined是初始化了,但未定義賦值
null === undefined 為 false
2.為什麼typeof null 是object?
不同的資料型別在底層都是通過二進位制表示的,二進位制前三位為000則會被判斷為object型別,而null底層的二進位制全都是0,那前三位肯定也是000,所以被判斷為object
3.undefined >= undefined 為什麼是 false ?
按照隱式轉換規則,可轉換成NaN >= NaN,NaN 不等於 NaN,也不大於,所以是false
4.null >= null 為什麼是 true?
按照隱式轉換規則,可轉換成0 >= 0,0 等於 0,所以是true
5.[] == ![] 為什麼是 true ?
1、! 優先順序高於 ==,[]不是假值,所以先轉換成 [] == false 2、右邊為布林值,false先轉數字0,所以可轉換為[] == 0 3、左邊為物件,[]呼叫toString轉為 '',轉換為'' == 0 4、左邊為字串,''轉換為0,最終為 0 == 0
6. 0.1 + 0.2 === 0.3,對嗎?
不對,JavaScript的計算存在精度丟失問題
console.log(0.1 + 0.2 === 0.3) // false
原因:JavaScript中小數是浮點數,需轉二進位制進行運算,有些小數無法用二進位制表示,所以只能取近似值,所以造成誤差
解決方法:
先變成整數運算,然後再變回小數
toFixed() 效能不好,不推薦
7.Ajax、Axios、Fetch有啥區別?
Ajax:是對XMLHttpRequest物件(XHR)的封裝
Axios:是基於Promise對XHR物件的封裝
Fetch:是window的一個方法,也是基於Promise,但是與XHR無關,不支援IE
8.建立一個物件的方式有哪幾種?
1.new Object建立
2.字面量建立 const obj = { name: 'Sunshin_Lin' }
3.工廠模式建立
function createObj(name) {
const obj = new Object()
obj.name = name
return obj
}
const obj = createObj('Sunshine_Lin')
4.建構函式建立
function Person(name) {
this.name = name
}
const person = new Person('Sunshine_Lin')
9.JS中有哪些不同型別的彈出框?
在JS中有三種類型的彈出框可用,分別是:
Alert
Confirm
Prompt