最近有很多人說數據類型是 6種。我怎麼記得JS的數據類型有8種。最近發現好多人對JS的基礎不太瞭解。很多數據類型都沒有搞清楚。不BB,我就按我的理解寫一波筆記,每次看一波書我就感覺一次比一次多懂一點。來補下知識點。。。。
JS數據類型:基礎概念
請注意:JS的數據類型有8種。
在ES5的時候,我們認知的數據類型確實是 6種:Number、String、Boolean、undefined、object、Null。
ES6 中新增了一種 Symbol 。這種類型的對象永不相等,即始創建的時候傳入相同的值,可以解決屬性名衝突的問題,做爲標記。
谷歌67版本中還出現了一種 bigInt。是指安全存儲、操作大整數。(但是很多人不把這個做爲一個類型)。
JS數據類型:JS 的數據類型有幾種?
8種。Number、String、Boolean、Null、undefined、object、symbol、bigInt。
JS數據類型:Object 中包含了哪幾種類型?
其中包含了Data、function、Array等。這三種是常規用的。
JS數據類型:JS的基本類型和引用類型有哪些呢?
基本類型(單類型):除Object。 String、Number、boolean、null、undefined。
引用類型:object。裏面包含的 function、Array、Date。
基本類型的實例:
引用類型的實例:
JS數據類型:JS 中 typeof 輸出分別是什麼?
{ } 、[ ] 輸出 object。
console.log( ) 輸出 function。
注意一點:NaN 是 Number 中的一種,非Number 。
String |
String |
字符串 |
Number |
Number |
數據類型 |
Boolean |
Boolean |
布爾型 |
Undefined |
Undefined |
沒有初始化、定義的值 |
Null |
Object |
不存在的對象 |
NaN |
Number |
Number 中的特殊數值 |
Object |
Function |
|
1、假設: Number('as') == NaN ?
肯定是false, Number(‘as’) 輸出 NaN。
注)用 isNaN() 檢測是否是非數值型。
請注意這裏 isNaN 幫我轉成 true 。
期間我一直在糾結 Number(‘as’) 輸出 NaN ?NaN == NaN 爲什麼是 false。其實 js 規定的NaN 不等於NaN。
2、假設:Number('123') == NaN ?
肯定是false,Number('123’) 輸出 123。
JS數據類型:如何判斷數據類型?
1、typeof 操作符(通用:上面有內容有講到)
2、toString ( )
作用:其他類型轉成 string 的方法
支持:number、boolean、string、object
不支持:null 、undefined
3、toLocaleString ( )
把數組轉成本地字符串
4、檢測數組類型的方法
① instanceof 操作符
②對象的 constructor 屬性
③ Array.isArray( ) 檢驗值是否爲數組
JS數據類型:null 和 undefined 有什麼區別?
Null 只有一個值,是 null。不存在的對象。
Undefined 只有一個值,是undefined。沒有初始化。undefined 是從 null 中派生出來的。
簡單理解就是:undefined 是沒有定義的,null 是定義了但是爲空。
JS數據類型:null 不存在的原因是什麼?如何解決?
不存在的原因是:
1、方法不存在
2、對象不存在
3、字符串變量不存在
4、接口類型對象沒初始化
解決方法:
做判斷處理的時候,放在設定值的最前面
JS數據類型:== 和 === 有什麼區別,什麼場景下使用?
== 表示相同。
比較的是物理地址,相當於比較兩個對象的 hashCode ,肯定不相等的。
類型不同,值也可能相等。
=== 表示嚴格相同。
例:同爲 null/undefined ,相等。
簡單理解就是 == 就是先比較數據類型是否一樣。=== 類型不同直接就是 false。
JS數據類型:對象可以比較地?
對象是可以比較,遍歷比較key 和 value就行, Object.is(value1, value2)。
JS數據類型:總結
1、Undefined 類型
只有一個值。在使用var 聲明變量但未對其加初始化時,這個變量就是undefined。
2、Null 類型
只有一個值。null是表示一個空對象指針,這也是typeof操作符檢測 null 值時會返回 object 的原因。
3、Boolean 類型
使用最多的一個類型,有兩個字面值,分別是true、false。true不一定等於1,false不一定等於0。
boolean類型的字面值是區分大小寫的。True和False是標識符
4、Number 類型
數字類型,表示數據的整數和浮點數。某些語言中也稱爲“雙精度值”。
var intNum = 55;十進制
var num = 012;八進制
var octalNum = 0x23;十六進制
5、String 類型
字符串可以有單引號、雙引號表示。字符串是不可變的,一旦創建,值就不能改變
要改變某個變量保存的字符串,首先要銷燬原來的字符串,然後於用另一個包含的字符串填充該變量。
注)toString()可以輸出二進制、八進制、十進制,十六進制。
null和undefined沒有toString()方法,用String函數不返回這兩個值的字面量。
6、Object 類型
ECMAjavascript中的對象其實就是一組數據和功能的集合。對象可以通過執行new操作符後跟要創建的對象類型的名稱來創建。創建object類型的實例併爲其添加屬性(或)方法,就可以自定義創建對象。
如:var o = new Object( );
object 的每個實例都有下列屬性和方法:
constructor:保存着用於創建當前對象的函數。(構造函數)constructor就是object();
hasOwnProperty(propertyName):用於檢查給定的當前屬性在當前對象實例中)而不是在實例原型中)是否存在。其中,作爲參數的屬性名(propertyName)必須以字稚串形式指定(例如:o.hasOwnProperty(“name”))。
isPrototypeOf(object):用於檢查傳入的對象是否是傳入對象原型。
propertyIsEnumerable(propertyName):用於檢查給定屬性是否能夠用for-in語句。與hasOwnProperty()方法一樣,作爲參數的屬性名必須以字符串形式指定。
toLocaleString( ):返回對象的字符串表示,該字符串與執行環境的地區對應。
toString( ):返回對象的字符串表示。
valueOf( ):返回對象的字符串、數值或者布爾值表示。通常與toString( )方法的返回值得相同。
ECMAJS中object是所有對象的基礎,因些所有對象都具有這些基本的屬性和方法。
7、 Symbol 類型
Symbol 類型的對象永遠不相等,即便創建的時候傳入相同的值。因此,可以用解決屬性名衝突的問題(適用於多少編碼),做爲標記。
這是 es6 新增的數據類型。
8、BigInt 類型
Javascript 中的任意精度整數,可以安全存儲和操作大整數。即始超出 Number 能夠表示的安全整數範圍。是 chrome 67中的新功能。