JavaScript 共有7種數(shù)據(jù)類型,分別是
- 數(shù)值(number):整數(shù)和小數(shù)如 1冀偶,1.2等
- 字符串(string):文本如 “JavaScript”等
- 布爾值(boolean):只有兩個值 true(真)false(假)
- undefined:表示“未定義”舆声,空或不存在
- null:表示空值
- 對象(object):各種值組成的集合
- symbol:es6的新增數(shù)據(jù)類型花沉,這里不做介紹
使用typeof
獲取數(shù)據(jù)類型柳爽,需要注意的是函數(shù)的數(shù)據(jù)類型輸出雖然是“function”,但其數(shù)據(jù)類型是“object”碱屁,null
的類型輸出雖是object
磷脯,但實際上是null
// 查看數(shù)據(jù)類型
typeof 1
"number"
typeof 'hi'
"string"
typeof false
"boolean"
typeof undefined
"undefined"
typeof null
"object"
typeof {}
"object"
typeof []
"object"
typeof function(){}
"function"
typeof Symbol()
"symbol"
undefined 和 null
兩者實際上都表示沒有(也許可以說是一種設(shè)計錯誤了),而undefined則一般出現(xiàn)在未賦值的變量娩脾,未定義的屬性赵誓,無返回值的函數(shù)返回值(或返回值是未傳入的參數(shù)),下面是輸出參考:
// 未賦值變量
var x
undefined
x
undefined
// 無返回值
(function() {return})()
undefined
// 返回值是未傳入的參數(shù)
(function(unpass) {return unpass})()
undefined
// 未定義屬性
var emptyObj = {}
undefined
emptyObj.prop
undefined
// == 情況下與null相等
undefined == null
true
// bool判斷
Boolean(null)
false
Boolean(undefined)
false
// 代表數(shù)值
Number(null)
0
Number(undefined)
NaN
boolean
布爾值柿赊,只有true
和false
兩種狀態(tài)架曹,只有在以下幾種情況下才會判斷為false
- undefined
- null
- false
- 0
- 非數(shù)字:NaN
- 空字符串:
""
或''
或 ``
Boolean(NaN)
false
Boolean(undefined)
false
Boolean(null)
false
Boolean(0)
false
Boolean(-1)
true
Boolean('')
false
Boolean("")
false
Boolean(``)
false
number
JavaScript 內(nèi)部,所有數(shù)字都是以64位浮點數(shù)形式儲存闹瞧,即使整數(shù)也是如此。所以展辞,1與1.0是相同的奥邮,是同一個數(shù)。
1 === 1.0
true
數(shù)字的表示和進制
// 次方
Math.pow(2, 3)
8
// 科學計數(shù)法
2e3
2000
2 * Math.pow(10, 3)
2000
// Number 可表示的范圍
Number.MAX_VALUE
1.7976931348623157e+308
Number.MIN_VALUE
5e-324
// 16進制
0x10
16
// 8進制
0o10
8
// 2進制
0b10
2
// 不建議的8進制表示法罗珍,以0開頭(瀏覽器為兼容舊代碼的處理洽腺,將以0開頭的數(shù)字識別為8進制,在es5的嚴格模式和es6中已廢除)
010
8
NaN(Not a Number)覆旱,NaN與任何數(shù)(包括它自己)的運算蘸朋,得到的都是NaN。
// NaN的判斷
typeof NaN
"number"
NaN === NaN
false
isNaN(NaN)
true
// 運算
NaN + 1
NaN
NaN + NaN
NaN
Infinity扣唱,無窮藕坯,有正無窮和負無窮
1 / 0
Infinity
1 / -0
-Infinity
parseInt,通常用于將字符串轉(zhuǎn)換為整數(shù)噪沙;parseFloat炼彪,通常用于將一個字符串轉(zhuǎn)為浮點數(shù)
parseInt('9')
9
// 先轉(zhuǎn)字符串再parse
parseInt(9)
9
// 2進制輸出10進制
parseInt('1000', 2)
8
// 超出進制范圍
parseInt('2', 2)
NaN
isFinite,用于檢查值是否是一個有限數(shù)值(finite number)正歼。在必要情況下辐马,參數(shù)會首先轉(zhuǎn)為一個數(shù)值。
isFinite(Infinity)
false
isFinite(-Infinity)
false
isFinite(NaN)
false
isFinite(undefined)
false
isFinite(null)
true
isFinite(-1)
true
object
對象局义,JavaScript中最重要的也是最常用的數(shù)據(jù)類型喜爷。與Python中的字典有類似之處。簡單的說就是鍵值不重復的鍵值對萄唇。
// 定義
var obj = {}
// 屬性賦值
obj.foo = 'foo'
obj['bar'] = 'bar'
obj
{foo: "foo", bar: "bar"}
// 屬性獲取
obj.foo
"foo"
obj['bar']
'bar'
// 屬性刪除
delete obj.foo
true
obj
{bar: "bar"}
// 查看屬性
Object.keys(obj)
["bar"]
// 判斷是否包含屬性
'bar' in obj
true
'foo' in obj
false
// 遍歷屬性
for (var attr in obj) {
console.log(typeof attr, attr)
console.log(typeof obj[attr], obj[attr])
}
string bar
string bar
string
字符串檩帐,即文本。
// 定義與表示
var
hiText = 'hi',
specialCharacterText = 'say \'hi\'', // “\”用于符號轉(zhuǎn)義 使用“\\”表示“\”
multiLineText = 'a' // 多行字符串,
+ 'b'
unicodeText = '\u4f60' // unicode表示
我們還需要知道另萤,每個字符在 JavaScript 內(nèi)部都是以16位(即2個字節(jié))的 UTF-16 格式儲存轿塔。也就是說,JavaScript 的單位字符長度固定為16位長度,即2個字節(jié)勾缭。
但是揍障,UTF-16 有兩種長度:對于碼點在U+0000到U+FFFF之間的字符,長度為16位(即2個字節(jié))俩由;對于碼點在U+10000到U+10FFFF之間的字符毒嫡,長度為32位(即4個字節(jié)),而且前兩個字節(jié)在0xD800到0xDBFF之間幻梯,后兩個字節(jié)在0xDC00到0xDFFF之間兜畸。舉例來說,碼點U+1D306對應的字符為??碘梢,它寫成 UTF-16 就是0xD834 0xDF06咬摇。
JavaScript 對 UTF-16 的支持是不完整的,由于歷史原因煞躬,只支持兩字節(jié)的字符肛鹏,不支持四字節(jié)的字符。這是因為 JavaScript 第一版發(fā)布的時候恩沛,Unicode 的碼點只編到U+FFFF在扰,因此兩字節(jié)足夠表示了。后來雷客,Unicode 納入的字符越來越多芒珠,出現(xiàn)了四字節(jié)的編碼。但是搅裙,JavaScript 的標準此時已經(jīng)定型了皱卓,統(tǒng)一將字符長度限制在兩字節(jié),導致無法識別四字節(jié)的字符部逮。上一節(jié)的那個四字節(jié)字符??好爬,瀏覽器會正確識別這是一個字符,但是 JavaScript 無法識別甥啄,會認為這是兩個字符存炮。
'??'.length
2
參考鏈接:
阮一峰JavaScript教程