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