Javascript的數據類型不包括Symbol,JavaScript有6種數據類型,分別是Undefined、Null、Boolean、Number、String和Object。
本文操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。
Javascript的數據類型不包括什么?
本文根據(JavaScript高級程序設計(第3版))總結
JavaScript之六大數據類型(不包括Symbol)
JavaScript 有6中數據類型——Undefined
,Null
,Boolean
,Number
,String
和Object
ES6中有7種, 多了一種數據類型Symbol, 本文不涉及.
Undefined
表示未定義,Null
表示空,Boolean
表示布爾值,Number
表示數值,String表示字符串。
通常我們可以用typeof
操作符來檢測變量的數據類型。
注意typeof是操作符!操作符!操作符!
typeof操作符應用一下規則:
"undefined"
——這個值是未定義的。"boolean"
——這個值是布爾值"string"
——這個值是字符串"number"
——這個值是數值"object"
——這個值是對象或Null"function"
——這個值是函數
例如字符串 str="我是String類型"
:
console.log(typeof str) //"string" 注意typeof操作符的返回的結果是字符串
對于typeof操作符, 還有一點詭異的地方,那就是:
1. typeof對null
返回"object"
,
2. typeof對未聲明的變量返回"undefined"
3. typeof對聲明而未初始化的變量也返回"undefined"
var s = null console.log(typeof s) //"object" console.log(typeof a) //"undefined", 注意變量a未聲明 var b; console.log(typeof b) //"undefined", 注意變量b聲明但未初始化
因為typeof
的詭異特性,且我們還需進步知道變量的具體信息,我們常用instanceof來確定變量的數據類型。
Undefined和Null
Undefined
和Null
類型只有一個值,那分別是undefined
和null
。
對于undefined
來說,需要記住下面兩點:
- 已聲明但未初始化的變量值為
undefined
(參考上面代碼) undefined
和null
相等
console.log(undefined == null) //true
對于null
來說,需要記住兩點:
typeof null
返回"object"
,從邏輯上看,null為object的引用(示例見typeof
)undefined
和null
相等
Boolean
Boolean
類型有兩個值——true
和false
。
任何數據可以調用布爾函數Boolean()
, 會返回一個布爾值。
類型 | true | false |
---|---|---|
Boolean | true | false |
String | 非零字符串 | “”(空字符串) |
Number | 非零數字(包括無窮大) | 0和NaN |
Object | 任何對象 | null |
Undefined | 不適用 | undefined |
Null | 不適用 | null |
為了便于記憶, 只需記住false
,""
(空字符串),0
,NaN
,null
和undefined
會使Boolean()
函數變為false
,其他為true
即可。
代碼范例:
console.log(Boolean(true)) //trueconsole.log(Boolean("")) //falseconsole.log(Boolean(1)) //trueconsole.log(Boolean(null)) //false
Number
Number
類型使用IEEE754
格式表示整數和浮點數。對于整數,JavaScript若遇到八進制和十六進制數會自動轉換為十進制數, 若數的范圍超過八進制和十六進制的便是范圍則解析為是十進制數。
console.log(070) //56console.log(0xA) //10
八進制在嚴格模式下出錯。
對于浮點數,Javascript會將小數點后全為0
的小數和小數點后沒有數字的小數自動轉換為整數。
console.log(1.00) //1console.log(10.) //10
浮點數最高精度為17位小數, 但是在算術運算時需要注意下面的式子:
console.log(0.1+0.2) //0.30000000000000004
這也是IEEE754
格式表示的通病。
數值范圍
Number
有兩個屬性表示JavaScript的數值范圍——Number.MAX_VALUE
和 Number.MIN_VALUE
。Number.MAX_VALUE
表示在JavaScript中最大的值,若超出其范圍則會轉為infinity
。 Number.MIN_VALUE
表示在JavaScript中最小的正值,若超出其范圍則會轉為0
。 Number.MAX_VALUE
在大多數瀏覽其中是1.7976931348623157e+308
.
我們可以通過isFinite()
方法來確定變量是否在Number.MAX_VALUE
和 Number.MIN_VALUE
之間,若在,則返回true
, 反之則返回false
。
var num = Number.MAX_VALUE+Number.MAX_VALUE; //超出了Number.MAX_VALUEconsole.log(isFinite(num)); //false
Number
中有個特殊值–NaN
, 這個數表示非數值(Not a number). 這個數有兩個特點:
- 任何設計
NaN
的操作都返回NaN
. NaN
不等于任何值(包括它本身).
我們通常可以用isNaN()
函數確定某個變量是否是NaN
.
console.log(isNaN(NaN)) // trueconsole.log(isNaN("1")) //false
數值轉換 Number(), parseInt()和parseFloat()
有三個函數可以講將數值轉換為數值類型: Number()
, parseInt()
, parseFloat()
. Number()
函數的轉換規則如下:
- 對于
Boolean
類型數值,true
轉換為1
,false
轉換為0
- 將
null
轉換為0
- 將
undefined
轉換為NaN
String
類型的值按以下規則轉換- 若字符串中只包含數字(包括前面帶正負號), 則將其轉換為十進制數. 且忽略前導
0
. - 若字符串包含有效的浮點格式數, 則轉換為浮點數. 忽略前導
0
. - 若字符串包含有效的十六進制格式(如
"0xf"
), 則將其轉換為相同大小的十進制數. - 若為空串, 則轉換為
0
- 若字符串包含上述格式之外的其他子, 則轉換為
NaN
- 若字符串中只包含數字(包括前面帶正負號), 則將其轉換為十進制數. 且忽略前導
- 待轉換類型是對象時, 調用對象的
valueOf()
方法返回某一值, 再按前面的方法轉換(第一次轉換)- 當第一次轉換結果為
NaN
時, 調用對象的toString()
方法返回字符串值, 再按前面的方法轉換
- 當第一次轉換結果為
parseInt()
函數有兩個參數, 第一個參數為待轉換的字符串(若不是字符串則使用ToString()函數轉換為字符串), 第二個參數2到36之間的一個數, 作為基數使用. 基數可以省略, 默認基數為10.
parseInt() 在解析第一個參數(字符串)時會忽略字符串前面的空格, 知道找到第一個非空格字符. 如果第一個字符不是數字字符或者負號, parseInt()會返回NaN; 也就是說, 用parseInt() 轉換空字符串會返回NaN(Number對空字符串返回0). 如果第一個字符是數字字符, parseInt() 會繼續解析第二個字符, 直到解析完所有后續字符或者遇到了一個非數字字符.
來源于(JavaScript高級程序設計(第3版))
console.log(parseInt(" 1234blue")) //1234console.log(parseInt("")) //NaNconsole.log(parseInt("AF", 16)) //175
parseFloat()
相比于前兩個, 他只能解析十進制數. 當解析的字符串可以解析成整數時也會被解析位整數.
console.log(parseFloat("1234basd")) // 1234console.log(parseFloat("22.5") // 22.5