JS里有七種數(shù)據(jù)類型:number? string? ?boolean null? undefined? symbol object?
1.null 與 undefined 都可以表示‘沒有’,含義非常相似。運用相等運算符(==)瀏覽器直接報告相等,運用(===)運算符則為false
為什么JavaScript 的設(shè)計者 Brendan Eich要設(shè)計null 與 undefined:1995年 JavaScript 誕生時,最初像 Java 一樣,只設(shè)置了null表示"無"。根據(jù) C 語言的傳統(tǒng),null可以自動轉(zhuǎn)為0。但是,JavaScript 的設(shè)計者 Brendan Eich,覺得這樣做還不夠。首先,第一版的 JavaScript 里面,null就像在 Java 里一樣,被當成一個對象,Brendan Eich 覺得表示“無”的值最好不是對象。其次,那時的 JavaScript 不包括錯誤處理機制,Brendan Eich 覺得,如果null自動轉(zhuǎn)為0,很不容易發(fā)現(xiàn)錯誤。
因此,他又設(shè)計了一個undefined。區(qū)別是這樣的:null是一個表示“空”的對象,轉(zhuǎn)為數(shù)值時為0;undefined是一個表示"此處無定義"的原始值,轉(zhuǎn)為數(shù)值時為NaN。
區(qū)別:1.變量沒有賦值:undefined??
? ? ? ? ? ?2.有一個對象,現(xiàn)在不想賦值,推薦初始化為null
? ? ? ? ? ?3.有一個非對象,現(xiàn)在不想賦值,推薦初始化為undefined.
2.布爾值:boolean: 代表“真”和“假”兩個狀態(tài)?!罢妗庇藐P(guān)鍵字true表示,“假”用關(guān)鍵字false表示。布爾值只有這兩個值。
undefined? null false 0 NaN ""或''(空字符串)? 轉(zhuǎn)化成布爾值都為 false。其它值都為true。注意,空數(shù)組([])和空對象({})對應的布爾值,都是true。
3.number:整數(shù)和浮點數(shù)? JavaScript 內(nèi)部,所有數(shù)字都是以64位浮點數(shù)形式儲存,即使整數(shù)也是如此。所以,1與1.0是相同的,是同一個數(shù)。
十進制:沒有前導0的數(shù)值。
八進制:有前綴0o或0O的數(shù)值,或者有前導0、且只用到0-7的八個阿拉伯數(shù)字的數(shù)值。
十六進制:有前綴0x或0X的數(shù)值
二進制:有前綴0b或0B的數(shù)值。
NaN是 JavaScript 的特殊值,表示“非數(shù)字”(Not a Number),主要出現(xiàn)在將字符串解析成數(shù)字出錯的場合。NaN不是獨立的數(shù)據(jù)類型,而是一個特殊數(shù)值,它的數(shù)據(jù)類型依然屬于Number,使用typeof運算符可以看得很清楚。NaN不等于任何值,包括它本身。
isNaN()方法可以用來判斷一個值是否為NaN。?isFinite()方法返回一個布爾值,表示某個值是否為正常的數(shù)值。
4.string:字符串就是零個或多個排在一起的字符,放在單引號或雙引號之中。單引號字符串的內(nèi)部,可以使用雙引號。雙引號字符串的內(nèi)部,可以使用單引號。如果要在單引號字符串的內(nèi)部,使用單引號,就必須在內(nèi)部的單引號前面加上反斜杠,用來轉(zhuǎn)義。雙引號字符串內(nèi)部使用雙引號,也是如此。
轉(zhuǎn)義:反斜杠(\)在字符串內(nèi)有特殊含義,用來表示一些特殊字符,所以又稱為轉(zhuǎn)義符。需要用反斜杠轉(zhuǎn)義的特殊字符,主要有下面這些。
\0?:null(\u0000)
\b?:后退鍵(\u0008)
\f?:換頁符(\u000C)
\n?:換行符(\u000A)
\r?:回車鍵(\u000D)
\t?:制表符(\u0009)
\v?:垂直制表符(\u000B)
\'?:單引號(\u0027)
\"?:雙引號(\u0022)
\\?:反斜杠(\u005C)
5.object:對象(object)是 JavaScript 語言的核心概念,也是最重要的數(shù)據(jù)類型。什么是對象?簡單說,對象就是一組“鍵值對”(key-value)的集合,是一種無序的復合數(shù)據(jù)集合。
對象的所有鍵名都是字符串(ES6 又引入了 Symbol 值也可以作為鍵名),所以加不加引號都可以。如果鍵名是數(shù)值,會被自動轉(zhuǎn)為字符串。
如果鍵名不符合標識名的條件【
第一個字符,可以是任意 Unicode 字母(包括英文字母和其他語言的字母),以及美元符號($)和下劃線(_)。
第二個字符及后面的字符,除了 Unicode 字母、美元符號和下劃線,還可以用數(shù)字0-9?!壳乙膊皇菙?shù)字,則必須加上引號,否則會報錯。
讀取對象的屬性,有兩種方法,一種是使用點運算符,還有一種是使用方括號運算符。請注意,如果使用方括號運算符,鍵名必須放在引號里面,否則會被當作變量處理。數(shù)字鍵可以不加引號,因為會自動轉(zhuǎn)成字符串。運用點運算的時候就會把它看成一個字符串。
點運算符和方括號運算符,不僅可以用來讀取值,還可以用來賦值。
查看一個對象本身的所有屬性,可以使用Object.keys方法。
delete命令用于刪除對象的屬性,刪除成功后返回true。
in運算符用于檢查對象是否包含某個屬性(注意,檢查的是鍵名,不是鍵值),如果包含就返回true,否則返回false。它的左邊是一個字符串,表示屬性名,右邊是一個對象。
for...in循環(huán)用來遍歷一個對象的全部屬性。
它遍歷的是對象所有可遍歷(enumerable)的屬性,會跳過不可遍歷的屬性。
它不僅遍歷對象自身的屬性,還遍歷繼承的屬性。
? ? ?