數(shù)據(jù)類(lèi)型分為:數(shù)值Number,字符串String,布爾值Boolean,Symbol,Null,Undefined,對(duì)象Object
其中,數(shù)值,字符串,布爾值為原始類(lèi)型
對(duì)象是最復(fù)雜的數(shù)據(jù)類(lèi)型,又可以分成三個(gè)子類(lèi)型。
1.狹義的對(duì)象(object)
2.數(shù)組(array)
3.函數(shù)(function)
1.判斷數(shù)據(jù)類(lèi)型
用typeof運(yùn)算符判斷數(shù)據(jù)類(lèi)型,像數(shù)值、字符串、布爾值就會(huì)分別返回number、string、boolean。
注意以下幾個(gè)案例的typeof的返回值,比較特殊
typeof undefined //undefined
typeof null //object
typeof fn //function
2.Number
浮點(diǎn)數(shù)
JavaScript內(nèi)部使用64位浮點(diǎn)數(shù),如遇到只有整數(shù)才能完成的運(yùn)算,則轉(zhuǎn)為32位整數(shù)。
由于浮點(diǎn)數(shù)不是精確的值,所以涉及小數(shù)的比較和運(yùn)算要特別小心。
0.1 + 0.2 === 0.3
// false
0.3 / 0.1
// 2.9999999999999996
(0.3 - 0.2) === (0.2 - 0.1)
// false
范圍精度:-2^53 ~2^53
數(shù)值范圍 2^-1023 ~2^1024
表示方式:
var a = 1
var a = .1
var a = 1.23e2
Ob11 //二進(jìn)制
011 //八進(jìn)制
0x11 //十六進(jìn)制
特殊數(shù)值:
(1)+0與-0
除了做分母分別返回 + Infinity/-Infinity 外,二者可以看作相等。
(2)NaN
表示“非數(shù)字”,屬于Number,不等于任何值。不論怎么算,都返回一個(gè)NaN。
tips 0/0 // NaN
(3)Infinity
使用場(chǎng)景:值過(guò)大/值過(guò)小/0做分母
與數(shù)值相關(guān)的全局方法:
(1)parseInt()
基本用法:
1.將字符串轉(zhuǎn)換為整數(shù)(一個(gè)個(gè)依次轉(zhuǎn),轉(zhuǎn)到不能轉(zhuǎn)為止)
2.接受第二個(gè)參數(shù)表示進(jìn)制
parseInt('1000',2) //8
(2)parseFloat()
基本用法:
1.用于將字符串轉(zhuǎn)換為浮點(diǎn)數(shù)(一個(gè)一個(gè)依次轉(zhuǎn),轉(zhuǎn)到不能轉(zhuǎn)為止)
2.當(dāng)轉(zhuǎn)換的目標(biāo)不是字符串(如{})/第一個(gè)不能轉(zhuǎn)換為浮點(diǎn)數(shù)(如'FF2')/空 的時(shí)候,返回NaN
(3)isNaN
用于判斷值是否為NaN,只對(duì)數(shù)值有效。(不是數(shù)值?轉(zhuǎn)!)
tips:判斷NaN可以利用其唯一不等于自身的特點(diǎn)
function myIsNaN(Value){
return value !==value;}
3.String
每個(gè)字符在JS中以 16 位 UTF-16 格式儲(chǔ)存,也就是說(shuō),JavaScript 的單位字符長(zhǎng)度固定為16位長(zhǎng)度,即2個(gè)字節(jié)。比如四字節(jié)字符??,瀏覽器會(huì)正確識(shí)別這是一個(gè)字符,但是 JavaScript 無(wú)法識(shí)別,會(huì)認(rèn)為這是兩個(gè)字符。
String表示舉例:
var a = 'Hi'
var a = "Hi"
var a = '' //長(zhǎng)度為0
var a = ' ' //加空格,長(zhǎng)度為1
多行字符串
(1)將一個(gè)字符串分成三行寫(xiě),JavaScript 就會(huì)報(bào)錯(cuò)。如果長(zhǎng)字符串必須分成多行,可以在每一行的尾部使用反斜杠。
但是如果在\后面有空格,瀏覽器就會(huì)報(bào)錯(cuò),而我們卻看不出來(lái),容易產(chǎn)生BUG,推薦使用第二種方法。
(2)連接運(yùn)算符(+)可以連接多個(gè)單行字符串,將長(zhǎng)字符串拆成多行書(shū)寫(xiě),輸出的時(shí)候也是單行。
var longString = 'Long '
+ 'long '
+ 'long '
+ 'string';
(3)鍵盤(pán)1旁邊的反引號(hào)
ES6新增支持這種寫(xiě)法,更簡(jiǎn)便,可讀性沒(méi)有明顯提高。
var s = `Hello
World`
字符串轉(zhuǎn)義
反斜杠(\)在字符串內(nèi)有特殊含義,用來(lái)表示一些特殊字符,所以又稱為轉(zhuǎn)義符。
\0 :null
\b :后退
\f :換頁(yè)
\n :換行
\r :回車(chē)
\t :制表符
\v :垂直制表符
' :'
\ :
如果在非特殊字符前面使用反斜杠,則反斜杠會(huì)被省略。
字符串的長(zhǎng)度
.length屬性返回字符串的長(zhǎng)度,該屬性也是無(wú)法改變的。
'\t\n1' 的 length 為 3
'\"' 的 length 為 1
4.Null和Undefined
都表示“沒(méi)有”。區(qū)別在于null是一個(gè)表示“空”的玩意,轉(zhuǎn)換數(shù)值為0,undefined是一個(gè)表示“此處無(wú)定義”的原始值,轉(zhuǎn)換后為NaN。
Null典型場(chǎng)景:
1.有一個(gè)對(duì)象object,現(xiàn)在還不想賦值
Undefined典型場(chǎng)景
1.有一個(gè)變量,沒(méi)有被賦值
2.有一個(gè)非對(duì)象,不想賦值
3.調(diào)用函數(shù),應(yīng)該提供的參數(shù)未提供
4.函數(shù)沒(méi)有返回值時(shí),返回
5.Boolean
兩個(gè)值,true/false。
兩元邏輯運(yùn)算符: && (And),|| (Or)
前置邏輯運(yùn)算符: ! (Not)
相等運(yùn)算符:===,!==,==,!=
比較運(yùn)算符:>,>=,<,<=
6.Object(復(fù)雜類(lèi)型)
是一組鍵值對(duì)的集合(key-value)
是一種無(wú)序的復(fù)合數(shù)據(jù)集合。
關(guān)于鍵值對(duì)
是鍵名加鍵值的組合,其中,鍵名全是字符串,可以是空字符''。
'中文' '9a' 'a b' 這種特殊的,必須加單引號(hào),如果不想加,那么你的鍵名就要符合標(biāo)識(shí)符規(guī)范。
Delete刪除Key
可以利用delete刪除key。刪除后,無(wú)key也無(wú)value
屬性的操作
(1)讀取對(duì)象的屬性
1.點(diǎn)運(yùn)算 obj.p
2.方括號(hào) obj['p']
注意,如果使用方括號(hào)運(yùn)算符,鍵名必須放在引號(hào)里面,否則會(huì)被當(dāng)作變量處理。
數(shù)值鍵名不能使用點(diǎn)運(yùn)算符(因?yàn)闀?huì)被當(dāng)成小數(shù)點(diǎn)),只能使用方括號(hào)運(yùn)算符。
(2)查看對(duì)象屬性
查看一個(gè)對(duì)象本身的所有屬性,可以使用Object.keys方法。
var obj = {
key1: 1,
key2: 2
};
Object.keys(obj);
// ['key1', 'key2']
(3)判斷是否存在 in
in運(yùn)算符用于檢查對(duì)象是否包含某個(gè)屬性(注意,檢查的是鍵名,不是鍵值),如果包含就返回true,否則返回false。
(4)屬性的遍歷 for...in
for...in循環(huán)用來(lái)遍歷一個(gè)對(duì)象的全部屬性。
var obj = {a: 1, b: 2, c: 3};
for (var i in obj) {
console.log(obj[i]);
}
// 1
// 2
// 3
for...in循環(huán)有兩個(gè)使用注意點(diǎn)。
1.它遍歷的是對(duì)象所有可遍歷(enumerable)的屬性,會(huì)跳過(guò)不可遍歷的屬性。
2.它不僅遍歷對(duì)象自身的屬性,還遍歷繼承的屬性。