JS 里的數(shù)據(jù)類型
JavaScript 的數(shù)據(jù)類型胸蛛,共有六種。
1渠抹、數(shù)值(number)
2钧忽、字符串(string)
3、布爾值(boolean)
4逼肯、undefined
5耸黑、null
6、對象(object)
原始類型:number string boolean
復(fù)合類型:object
特殊值:undefined null
JS三種方法判斷一個值到底是什么類型
1篮幢、typeof運算符
數(shù)值大刊、字符串、布爾值分別返回number三椿、string缺菌、boolean。
注意以下幾個案例的typeof的返回值
typeof undefined //undefined
typeof null //object
typeof fn //function
2搜锰、instanceof運算符
3伴郁、Object.prototype.toString方法
- 數(shù)值(number)
1、整數(shù)與浮點數(shù)
JS內(nèi)部蛋叼,所有的數(shù)字都是以64位浮點數(shù)形式存儲焊傅,JS底層語言中沒有整數(shù)的概念剂陡,所有的數(shù)字都是小數(shù),即64位浮點數(shù)狐胎,
因浮點數(shù)鸭栖,不是精確的值,運算時要特別小心
0.1 + 0,2 === 0.3 //false
2握巢、數(shù)值的表示法
下面兩種情況晕鹊,JS自動轉(zhuǎn)換為科學(xué)計數(shù)發(fā)
(1)小數(shù)點前的數(shù)字多于21位
12324234343453454565486450978054789567
1.2324234343453454e+37
(2)小數(shù)點后的零多于5個。
.0000000009
9e-10
3暴浦、數(shù)值的進(jìn)制
十進(jìn)制:沒有前導(dǎo)0的數(shù)值溅话。
八進(jìn)制:有前綴0o或0O的數(shù)值,或者有前導(dǎo)0歌焦、且只用到0-7的八個阿拉伯?dāng)?shù)字的數(shù)值公荧。
十六進(jìn)制:有前綴0x或0X的數(shù)值。
二進(jìn)制:有前綴0b或0B的數(shù)值同规。
默認(rèn)情況下,JavaScript 內(nèi)部會自動將八進(jìn)制窟社、十六進(jìn)制券勺、二進(jìn)制轉(zhuǎn)為十進(jìn)制。
4灿里、特殊數(shù)值
(1)JS 內(nèi)部實際上存在2個0:一個是+0关炼,一個是-0,區(qū)別就是64位浮點數(shù)表示法的符號位不同匣吊。它們是等價的儒拂。
只有作為分子時不等價
1/0 //Infinity
1/-0 //-Infinity
(2)NaN,表示“非數(shù)字”(Not a Number)色鸳,主要出現(xiàn)在將字符串解析成數(shù)字出錯的場合社痛。
NaN不等于任何值,包括它本身命雀。
NaN與任何數(shù)(包括它自己)的運算蒜哀,得到的都是NaN。
NaN在布爾運算時被當(dāng)作false吏砂。
判斷是否是NaN的方法撵儿,isNaN(),isNaN只對數(shù)值有效,如果傳入其他值狐血,會被轉(zhuǎn)為數(shù)值
5淀歇、正無窮Infinity和負(fù)無窮-Infinity
Math.pow(2, 1024) // Infinity
0/0 //Nan
1/0 //Infinity
Infinity大于一切數(shù)值(除了NaN),-Infinity小于一切數(shù)值(除了NaN)
Infinity與NaN比較匈织,總是返回false浪默。
- 字符串(string)
1、string 用單引號或雙引號表示
2、空字符串和空格字符串
''.length //0
' '.length //1
3浴鸿、轉(zhuǎn)義符:反斜杠 \
4井氢、多行字符串的寫法
//第一種
var x1 = '123\
234'
//第二種 (推薦)
var x2 = '123' +
234'
ES6多行字符串
var x3 = `123
344`
- 布爾值(boolean)
1、布爾只有兩個值true or false
2岳链、下面的運算符計算結(jié)果會返回布爾值
兩元邏輯運算符: && (And)花竞,|| (Or)
前置邏輯運算符: ! (Not)
相等運算符:===,!==掸哑,==约急,!=
比較運算符:>,>=苗分,<厌蔽,<=
3、布爾值轉(zhuǎn)換規(guī)則摔癣,下面六個值轉(zhuǎn)為false奴饮,其他均為true
undefined
null
false
0
NaN
""或''(空字符串)
- null和undefined
null與undefined都可以表示“沒有”,相等運算符(==)甚至報告兩者相等,那null和undefined有什么區(qū)別呢择浊?
undefined == null // true
null 只有一個值null
undefined 只有一個值undefined
變量沒有賦值戴卜,是undefined
有一個對象,還不想賦值琢岩,推薦給一個空值null
非對象投剥,還不想賦值,推薦給一個undefined
- 對象(object)
1担孔、對象就是一組“鍵值對”(key-value)的集合江锨,是一種無序的復(fù)合數(shù)據(jù)集合
2、鍵名:對象的所有key都是字符串糕篇,加不加引號都可以啄育,非字符串的key會自動轉(zhuǎn)為字符串,但不加引號拌消,key必須符合標(biāo)識符
3灸撰、獲取屬性值
(1) object[‘key’],方括號運算符拼坎,鍵名必須放在引號里面浮毯,否則會被當(dāng)作變量處理。
(2) object.key泰鸡,此時key是字符串key
4债蓝、查看所有屬性
Object.keys方法,屬性以數(shù)組的方式列出
5盛龄、刪除對象的屬性
delete object['key'] //刪除后無key饰迹,無value
object.key //undefined
'key' in object //false
//這種情況芳誓,只是把undefined的值賦給key,key還是在的
object['key'] = undefined
6啊鸭、in運算符
檢查對象是否包含某個屬性锹淌,如果包含就返回true,否則返回false赠制。
var obj = { p: 1 };
'p' in obj // true
in運算符它不能識別哪些屬性是對象自身的赂摆,哪些屬性是繼承的。繼承的屬性也返回true
7钟些、for…in 循環(huán)
for...in循環(huán)用來遍歷一個對象的全部屬性烟号。
它遍歷的是對象所有可遍歷(enumerable)的屬性,會跳過不可遍歷的屬性政恍。
它不僅遍歷對象自身的屬性汪拥,還遍歷繼承的屬性。