ECMAScript
迄今爲止標準定義了7
種數據類型:6
種原始類型--String
、Number
、Boolean
、Undefined
、Null
和Symbol
;1
種引用類型--Object
前端
看到這裏,你是否已經對它們瞭如指掌呢。若是你還對它們之間的定義、轉換、檢測等方面並非那麼清楚,或者已經有些模糊。那麼,下面就讓咱們一塊兒去從新探索、溫習一遍吧git
若是文章中有出現紕漏、錯誤之處,還請看到的小夥伴多多指教,先行謝過github
如下↓web
除
Object
之外的全部類型都是不可變的(值自己沒法被改變),咱們稱這些類型的值爲原始值
segmentfault
JavaScript
的字符串類型用於表示文本數據.JavaScript
字符串是不可更改的。這意味着字符串一旦被建立,就不能被修改。可是,能夠基於對原始字符串的操做來建立新的字符串數組
var a = 'hello'
複製代碼
類型轉換:數據結構
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
方法,則調用該方法並返回響應的結果ui
若是是
null
返回'null'
spa
若是是
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()
以及操做符隱式轉換
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
關注
期待同行
以上