JavaScript 的數(shù)據(jù)類型,共有7種。
1:數(shù)值(number)
2:字符串(string)
3:布爾值(boolean)
4:undefined
5:null
6:對象(object)
7:symbol
原始類型: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ù)值的進制
十進制:沒有前導(dǎo)0的數(shù)值。
八進制:有前綴0o或0O的數(shù)值桃漾,或者有前導(dǎo)0坏匪、且只用到0-7的八個阿拉伯數(shù)字的數(shù)值。
十六進制:有前綴0x或0X的數(shù)值撬统。
二進制:有前綴0b或0B的數(shù)值适滓。
默認情況下,JavaScript 內(nèi)部會自動將八進制恋追、十六進制凭迹、二進制轉(zhuǎ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在布爾運算時被當作false。
判斷是否是NaN的方法哥蔚,isNaN(),isNaN只對數(shù)值有效倒谷,如果傳入其他值,會被轉(zhuǎn)為數(shù)值
5糙箍、正無窮Infinity和負無窮-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必須符合標識符
3慷荔、獲取屬性值
(1) object[‘key’],方括號運算符缠俺,鍵名必須放在引號里面显晶,否則會被當作變量處理。
(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)的屬性鞋拟,會跳過不可遍歷的屬性骂维。
它不僅遍歷對象自身的屬性,還遍歷繼承的屬性贺纲。