關於夢迴前端
每天一個重要的知識點,以問答的形式進行反推,利用碎片時間來完成自我提升
Day1 數據類型篇
説在前面
JS是典型的弱類型(動態)語言, 意味着你不用提前聲明變量的類型,在程序運行過程中,類型會被自動確定, 也意味着你可以使用同一個變量保存不同類型的數據
請簡述Js中有哪些數據類型?
Js中每一個值都屬於某一種數據類型, 根據最新的語言標準,一共有8種類型
- Boolean
- Null
- Undefined
- Number
- BigInt
- String
- Symbol
- Object
除了新增的BigInt及Symbol,其它的幾種都是咱們的老朋友了,Symbol也很好理解,在Js中表示獨一無二的值,這裏我們簡單來理解一下BigInt
BigInt JavaScript 中的任意精度整數
為什麼要有BigInt類型, 不能使用Number來解決?那我們先來看看Js中Number的現狀, 有一定經驗的都同學應該都知道其有兩大弊端
- 精度問題
有經典的面試題0.1 + 0.2不等於0.3,這裏不作詳細論證
- 最大安全整數
我們可以在控制枱通過Number.MAX_SAFE_INTEGER來獲取Number類型能表示的最大整數
通過上面,發現max_03的結果在我們意料之外,原因就在於我們超出Number安全整數範圍
BigInts 是 JavaScript中的一個新的數字基本類型,可以用任意精度表示整數, 要使用BigInts, 很簡單
// 字面量只需要在整數後面添加n後綴
const bigInt = 1000n
// 也可以通過全局的形式
const binInt2 = BigInt(1001)
工作中真實的經典場景,後端同學將日期轉化為時間戳給我們,我們解析後發現時間都是一致的, 這就是因為返給我們的時間戳已經超過了Number的最大安全整數範圍
null跟undefined的區別, 分別在什麼場景下使用?
Undefined 類型表示未定義,它的類型只有一個值,就是 undefined。任何變量在賦值前是 Undefined 類型
Null 類型也只有一個值,就是 null,它的語義表示空值
與 undefined 不同,null 是 JavaScript 關鍵字
在語義上,Null 表示的是:定義了但是為空。所以,在實際編程時,我們一般不會把變量賦值為 undefined
數組常用方法有哪些?
取自33進階成員@Jenny打卡筆記
字符串常用方法有哪些?
取自33進階成員@Jenny打卡筆記
Js中如何去判斷一個值的類型?
在我們學習了Js中的基本類型後,那麼如何在實際工作中去判斷一個值的類型呢?
- typeof
// 在判斷除Object類型的對象時比較方便
console.log(typeof 123); //number
console.log(typeof '123'); //string
console.log(typeof true); //boolean
console.log(typeof undefined); //undefined
console.log(typeof null); //object
console.log(typeof []); //object
console.log(typeof {}); //object
console.log(typeof new Date()); //object
console.log(typeof /\d/); //object
console.log(typeof function() {}); //function
- instanceof
instanceof運算符返回一個布爾值,表示指定對象是否為某個構造函數的實例
注意,instanceof運算符只能用於對象,不適用原始類型的值
const Js = [];
Js instanceof Array //true
Js instanceof Object //true
- toString
上面兩種方法都有一些缺點,那有沒有一種方式可以做到萬無一失呢? 有的,我們來看一下toString的表演
試驗一下
Object.prototype.toString.call(null); // "[object Null]"
Object.prototype.toString.call([]); // "[object Array]"
Object.prototype.toString.call({}); // "[object Object]"
Object.prototype.toString.call(123); // "[object Number]"
Object.prototype.toString.call('123'); // "[object String]"
Object.prototype.toString.call(false); // "[object Boolean]"
Object.prototype.toString.call(undefined); // "[object Undefined]"
你是如何理解Js中類型轉換機制?
類型轉換髮生在靜態類型語言的編譯階段,而強制類型轉換則發生在動態類型語言的運行時(runtime)。
在 Js 中通常將它們統稱為強制類型轉換,我個人則傾向於用“隱式強制類型轉換”(implicit coercion)和“顯式強制類型轉換”(explicit coercion)來區分
- 顯式類型轉換
這個其實很好理解, 我們來看一下代碼
// 字符串轉換
var a = 123
var b = String(a) // '123'
// 數字轉換
var c = '3.14'
var d = Number(c) // 3.14
// 布爾值轉換
var e = []
var f = Boolean(e) // true
- 隱式強制類型轉換
觸發 JS 隱式轉換是需要先決條件的, 當使用 ==、&&、|| 等邏輯操作符進行判斷時, 或使用 + - * / 四則運算符進行操作時
這裏多的不説了,説一下== 與 ===的區別
常見的誤區是“== 檢查值是否相等,=== 檢查值和類型是否相等”
正確的解釋是:“== 允許在相等比較中進行強制類型轉換,而 === 不允許。”
預告
- Day2 數據結構
- Day3 基本算法
- Day4 HTTP協議
最後
如果你想加入我們一起成長,掃碼回覆1即可,在這裏,你不是一個人在戰鬥
點擊加入