JavaScript中的數據類型

前言

ECMAScript 迄今爲止標準定義了 7 種數據類型:6 種原始類型-- StringNumberBooleanUndefinedNullSymbol1 種引用類型-- Object前端

看到這裏,你是否已經對它們瞭如指掌呢。若是你還對它們之間的定義、轉換、檢測等方面並非那麼清楚,或者已經有些模糊。那麼,下面就讓咱們一塊兒去從新探索、溫習一遍吧git

若是文章中有出現紕漏、錯誤之處,還請看到的小夥伴多多指教,先行謝過github

如下↓web

原始值

Object 之外的全部類型都是不可變的(值自己沒法被改變),咱們稱這些類型的值爲 原始值segmentfault

String類型

JavaScript 的字符串類型用於表示文本數據.JavaScript 字符串是不可更改的。這意味着字符串一旦被建立,就不能被修改。可是,能夠基於對原始字符串的操做來建立新的字符串數組

var a = 'hello'
複製代碼

類型轉換:數據結構

  • toString()
var num = 2;
num.toString() // '2'
var found = true;
found.toString() // 'true'

複製代碼

除去 nullundefined 以外,其他數據類型都存在 toString 方法,使用會報錯函數

  • String()
var sym = Symbol(1);
String(sym) // 'Symbol'
var num = 10;
String(num)  // '10'
var str;
String(str) // 'undefined'
複製代碼

若是值有 toString 方法,則調用該方法並返回響應的結果ui

若是是 null 返回 'null'spa

若是是 undefined 返回 'undefined'

  • 隱式轉換
var a = 3;
a + ''  // '3'
var obj = {a: 3};

obj + '' // [object object]
複製代碼

轉換規則和 String 方法一致

Number類型

根據 ECMAScript 標準,JavaScript 中只有一種數字類型:基於 IEEE 754 標準的雙精度 64 位二進制格式的值(-(263 -1)263 -1

特殊的數值類型:

無窮大:+Infinity()-Infinity()NaN (非數值,Not-a-Number)

NaN,非數值。是一個特殊的 Number 類型,用來表示一個原本要返回數值的操做未返回數值的狀況

  • 任何涉及 NaN 的操做都返回 NaN
  • NaN 與任何值都不相等,包括 NaN 自己
40 / NaN  // NaN
NaN === NaN // false
複製代碼

最基本的數值字面量格式是十進制整數,還能夠經過八進制或十六進制來表示。八進制字面值的第一位必須是 0,而後是八進制數字序列(0 ~ 7)。十六進制字面量的前兩位必須是 0x,後跟任何十六進制數字(0 ~ 9 以及 a ~ f)。其中字母能夠是大寫也能夠是小寫

var num1 = 070; // 八進制的56
var num1 = 079; // 無效的八進制,會解析爲十進制的79
var num2 = 56; // 十進制的56
var num3 = 0x38; // 十六進制的56
複製代碼

類型轉化方式:Number()parseInt()parseFloat() 以及操做符隱式轉換

Boolean類型

表示一個邏輯實體,能夠有兩個值:truefalse

var suc = true;
var los = false;
複製代碼

類型轉化方式:Boolean()以及操做符隱式轉換

Undefined類型

Undefined 類型只有一個值,即特殊的 undefined 。一個 聲明但沒有被賦值的變量會有個默認值 undefined

var a;  // undefined
複製代碼

Null類型

Null 類型也只有一個值,即特殊的 null 表示一個空對象指針

var foo = null;
複製代碼

Symbol類型

符號 (Symbols)ECMAScript6 版新定義的。符號類型是惟一的而且是不可修改的

var s = Symbol()
複製代碼

Symbol 函數前不能使用 new 命令,不然會報錯。這是由於生成的 Symbol 是一個原始類型的值,不是對象

Symbol 函數能夠接受一個字符串做爲參數,表示對 Symbol 實例的描述

引用類型

ECMAScript 中,引用類型是一種數據結構,用於將數據和功能組織在一塊兒

最多見的引用類型:對象(Object)、數組(Array)、函數(Function)、正則(RegExp)和日期(Date)

引用類型與基本類型之間最大的不一樣

基本數據類型的值是按值訪問的,基本類型的值是不可變的

var a = 1;
var b = 1;

a === b  // true

b = a 
b = 2;

a // 1
複製代碼

引用類型的值是按引用訪問的,引用類型的值是可變的

var a = {};
var b = {};

a === b  // false

var a = {};
var b = a
b.name = 'hello'

a.name // hello
複製代碼

基本包裝類型

爲了便於操做基本類型值, ECMAScript 還提供了 3 個特殊的引用類型:BooleanNumberString

var a = new String('hello')
typeof a // object 
複製代碼

引用類型與基本包裝類型的主要區別就是對象的生存期。使用 new 操做符建立的引用類型的實例,在執行流離開當前做用域以前都一直保存在內存當中。而自動建立的基本包裝類型的對象,則只存在於一行代碼的執行瞬間,而後當即銷燬。這意味着咱們不能在運行時給基本類型值添加屬性和方法

var s1 = 'some text';
s1.color = 'red';
s1.color // undefined

// 可是這樣是能夠的

var s1 = new String('some text');
s1.color = 'red';
s1.color // red 
複製代碼

不建議顯式的建立基本包裝類型的對象,由於在不少時候會形成一些讓人很迷惑的東西

var b = new Boolean(false)
var c = b && true
c // true
複製代碼

這樣的狀況下,b 這個變量就是 Boolean 對象,因此不管在什麼狀況下,它都是 true

記得以前看到過這樣一個問題:

var str = 'hello'

typeof str // String

str instanceof String // false
複製代碼

這裏的結果爲 false 的緣由就是 str 本質上是一個原始值,並不存在 prototype 屬性

固然,這裏也涉及到了數據類型的判斷,有興趣的小夥伴能夠 點擊這裏 查看如何判斷 JavaScript 中的數據類型

後記

不斷總結溫習前端方面的知識點以及有趣的東西,感興趣的小夥伴能夠 點擊這裏,查看完整版前端總結知識點,歡迎 star 關注

期待同行

以上

相關文章
相關標籤/搜索