【二】基礎類型

前言
本篇博客旨在清晰認識JS六種基礎類型以及特征。
面試回答
基礎類型:值類型有string、number、Boolean、undefined、null、Symbol。值類型是棧內(nèi)存,占用空間固定,保存和復制的是值本身。一般我們用typeof去判斷值類型,不過不能用來判斷null,因為null在內(nèi)存中屬于引用類型,只不過因為方便效率所以歸為值類型。至于typeof的檢測原理,涉及信息儲存和機器碼的問題,就沒有深入了。
知識點
基礎類型都是棧(stack),簡單理解一下,有兩個特征:1. 保存和復制值的本身。2.占用空間固定, 棧內(nèi)存中,由操作系統(tǒng)自動分配內(nèi)存空間,自動釋放。
1.Boolean
對于Boolean類型就一句話:undefined、null、""、0、NaN、false除了這6個值在js中屬于假值,其他均為真值。
2.Undefined
定義
undefined 表示聲明了變量但未對其初始化時賦予該變量值的返回值。
應用場景
1.返回undefined場景
3.Null
定義
已定義,且表示"無"的值
對于null與undefined的異同可以從內(nèi)存角度看:null在內(nèi)存里屬于引用類型,undefined在內(nèi)存里屬于基本類型。所以typeof null 的輸出為Object,typeof undefined 的輸出為undefined。之所以把null歸為基本類型,是因為"效率"。當然,日常開發(fā)中,為了方便使用,將null理解為:聲明并賦值的變量,該變量的值為null;將undefined理解為:聲明變量,但沒有賦值的返回值
4.Number
應用場景
1.精度問題
JavaScript 采用“IEEE 754 標準定義的雙精度64位格式” ,所以會出現(xiàn)精度缺失的異常情況。
解決辦法:
乘除法
toFixed(n):保留n位小數(shù),不準確,且n不能過大。
2.添加千分位
toLocaleString()
當然復雜特殊的添加千分號就不滿足了,需要自定義,思路如下:
5.String
常用API
indexOf(): 返回字符串中指定文本首次出現(xiàn)的索引位置
split():根據(jù)參數(shù)將字符串分割,輸出為數(shù)組
trim():去掉字符串兩端的空格
replace() : 根據(jù)參數(shù)替換指定字符
toLowerCase():把字符串轉換成小寫
toUpperCase():把字符串轉換成大寫
parseInt() :把字符串轉換成整數(shù)
parseFloat() :把字符串轉換成數(shù)字
6.Symbol
定義
"Symbol" ,表示唯一的標識符。
特點1:Symbol具有唯一性,即使用同一"描述"生成的值也不相等
特點2:Symbol具有隱藏性,這個特點使Symbol類型受到保護,防止被意外使用或重寫,不過可以通過Object.getOwnPropertySymbols方法讀取到
相關API
創(chuàng)建Symbol
Symbol():Symbol()定義的值不放入全局symbol注冊表中,每次都是新建,即使描述相同值也不相等,即無法被Symbol.for()查詢到對應的值,所以創(chuàng)建Symbol也推薦使用Symbol.for()創(chuàng)建,除非你不打算獲取Symbol()的值。
查詢Symbol的值
Symbol.for:接受一個"描述"作為參數(shù),然后全局環(huán)境中搜索是否有以該參數(shù)注冊的Symbol值。如果有,就返回這個Symbol值。沒有就創(chuàng)建并返回一個以該字符串作為名稱的Symbol值,并放入一個全局 symbol 注冊表中。
查詢Symbol的描述
Symbol.keyFor():接受一個"變量名"作為參數(shù),返回一個 Symbol的"描述"
應用場景
1.替代常量 :保證常量的唯一性
代碼里經(jīng)常會使用常量來控制業(yè)務邏輯關系,如果常量少還比較好維護,但是常量一多,光是維護值得唯一性就是一項不小的工作。使用Symbol,可以保證常量的唯一性,也可以使代碼相對優(yōu)雅規(guī)范一些。
2.作為屬性名或變量名,避免重名帶來的問題;作為屬性名,必須使用[]運算符來定義和獲??;
3.作為內(nèi)置對象的特定方法的屬性名,方便開發(fā)者對其重寫,相當于定義類的私有屬性/方法
4.注意事項
對象的合并、覆蓋、使用用JSON.stringify()
將對象轉換成JSON字符串的時候,Symbol屬性會被排除在輸出內(nèi)容之外;
for...in ,object.key()等方法訪問不到;
不會被隱式轉換,如alert等,非要顯示需要在它上面調(diào)用toString()方法, Symbol("id").toString()
應用
1. || 、&&操作符的返回結果
我們經(jīng)常根據(jù)某幾個變量做if判斷,如何確認判斷結果是你想要的,可以使用下面這種方法:先確定返回結果,再根據(jù)"undefined、null、""、0、NaN、false除了這6個值在js中屬于假值,其他均為真值",那么我們便需要知道基本數(shù)據(jù)類型及引用數(shù)據(jù)類型的操作符返回結果:
2.隱式類型轉換
最后
走過路過,不要錯過,點贊、收藏、評論三連~