ECMAScript
迄今爲止標準定義了7
種數據類型:6
種原始類型--String
、Number
、Boolean
、Undefined
、Null
和Symbol
;1
種引用類型--Object
看到這裏,你是否已經對它們瞭如指掌呢。若是你還對它們之間的定義、轉換、檢測等方面並非那麼清楚,或者已經有些模糊。那麼,下面就讓咱們一塊兒去從新探索、溫習一遍吧前端
若是文章中有出現紕漏、錯誤之處,還請看到的小夥伴多多指教,先行謝過git
如下↓github
除Object
之外的全部類型都是不可變的(值自己沒法被改變),咱們稱這些類型的值爲原始值
JavaScript
的字符串類型用於表示文本數據.JavaScript
字符串是不可更改的。這意味着字符串一旦被建立,就不能被修改。可是,能夠基於對原始字符串的操做來建立新的字符串
var a = 'hello'
類型轉換:web
toString()
var num = 2; num.toString() // '2' var found = true; found.toString() // 'true'
除去null
與undefined
以外,其他數據類型都存在toString
方法,使用會報錯
String()
var sym = Symbol(1); String(sym) // 'Symbol' var num = 10; String(num) // '10' var str; String(str) // 'undefined'
若是值有toString
方法,則調用該方法並返回響應的結果若是是
null
返回'null'
segmentfault若是是
undefined
返回'undefined'
數組
var a = 3; a + '' // '3' var obj = {a: 3}; obj + '' // [object object]
轉換規則和
String
方法一致
根據ECMAScript
標準,JavaScript
中只有一種數字類型:基於IEEE 754
標準的雙精度64
位二進制格式的值(-(263 -1)
到263 -1
)
特殊的數值類型:數據結構
無窮大:+Infinity()
,-Infinity()
和NaN
(非數值,Not-a-Number
)
NaN
,非數值。是一個特殊的 Number
類型,用來表示一個原本要返回數值的操做未返回數值的狀況函數
NaN
的操做都返回 NaN
NaN
與任何值都不相等,包括 NaN
自己40 / NaN // NaN NaN === NaN // false
最基本的數值字面量格式是十進制整數,還能夠經過八進制或十六進制來表示。八進制字面值的第一位必須是0
,而後是八進制數字序列(0 ~ 7)
。十六進制字面量的前兩位必須是0x
,後跟任何十六進制數字(0 ~ 9 以及 a ~ f)
。其中字母能夠是大寫也能夠是小寫
var num1 = 070; // 八進制的56 var num1 = 079; // 無效的八進制,會解析爲十進制的79 var num2 = 56; // 十進制的56 var num3 = 0x38; // 十六進制的56
類型轉化方式:Number()
、parseInt()
、parseFloat()
以及操做符隱式轉換
表示一個邏輯實體,能夠有兩個值:true
和false
var suc = true; var los = false;
類型轉化方式:Boolean()
以及操做符隱式轉換prototype
Undefined
類型只有一個值,即特殊的undefined
。一個 聲明但沒有被賦值的變量會有個默認值undefined
var a; // undefined
Null
類型也只有一個值,即特殊的null
表示一個空對象指針
var foo = null;
符號(Symbols)
是ECMAScript
第6
版新定義的。符號類型是惟一的而且是不可修改的
var s = Symbol()
Symbol
函數前不能使用new
命令,不然會報錯。這是由於生成的Symbol
是一個原始類型的值,不是對象
Symbol
函數能夠接受一個字符串做爲參數,表示對Symbol
實例的描述指針
在
ECMAScript
中,引用類型是一種數據結構,用於將數據和功能組織在一塊兒
最多見的引用類型:對象(Object)
、數組(Array)
、函數(Function)
、正則(RegExp)
和日期(Date)
等
引用類型與基本類型之間最大的不一樣
基本數據類型的值是按值訪問的,基本類型的值是不可變的
var a = 1; var b = 1; a === b // true b = a b = 2; a // 1
引用類型的值是按引用訪問的,引用類型的值是可變的
var a = {}; var b = {}; a === b // false var a = {}; var b = a b.name = 'hello' a.name // hello
爲了便於操做基本類型值,ECMAScript
還提供了3
個特殊的引用類型:Boolean
、Number
和String
var a = new String('hello') typeof a // object
引用類型與基本包裝類型的主要區別就是對象的生存期。使用
new
操做符建立的引用類型的實例,在執行流離開當前做用域以前都一直保存在內存當中。而自動建立的基本包裝類型的對象,則只存在於一行代碼的執行瞬間,而後當即銷燬。這意味着咱們不能在運行時給基本類型值添加屬性和方法
var s1 = 'some text'; s1.color = 'red'; s1.color // undefined // 可是這樣是能夠的 var s1 = new String('some text'); s1.color = 'red'; s1.color // red
不建議顯式的建立基本包裝類型的對象,由於在不少時候會形成一些讓人很迷惑的東西
var b = new Boolean(false) var c = b && true c // true
這樣的狀況下,b
這個變量就是 Boolean
對象,因此不管在什麼狀況下,它都是 true
記得以前看到過這樣一個問題:
var str = 'hello' typeof str // String str instanceof String // false
這裏的結果爲 false
的緣由就是 str
本質上是一個原始值,並不存在 prototype
屬性
固然,這裏也涉及到了數據類型的判斷,有興趣的小夥伴能夠 點擊這裏 查看如何判斷 JavaScript
中的數據類型
不斷總結溫習前端方面的知識點以及有趣的東西,感興趣的小夥伴能夠 點擊這裏,查看完整版前端總結知識點,歡迎 star
關注
期待同行
以上