1. 程式人生 > 其它 >2021-11-30js基礎整理

2021-11-30js基礎整理

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