前端進階系列(第1期):理解JavaScript資料型別
前端進階系列本著“好好幹前端”的心態,一步一個腳印認真練好前端的基本功,為在前端的發展道路上做好鋪墊。
本週正式開始前端進階的第1期,本週的主題是理解JavaScript資料型別
。
資料型別
最新的 ECMAScript 標準定義了7種資料型別,主要分為兩大類基本型別
和引用型別
。
基本型別
基本型別
有時也被稱為值型別
或原始型別
。其中包括6種資料型別,分別是:字串型別(String)
、數字型別(Number)
、布林型別(Boolean)
、對空型別(Null)
、未定義型別(Undefined)
、符號型別(Symbol)
。
字串型別
JavaScript的字串型別用於表示文字資料。它是一組16位的無符號整數值的“元素”。在字串中的每個元素佔據了字串的位置。第一個元素的索引為0,下一個是索引1,依此類推。字串的長度是它的元素的數量。
數字型別
根據 ECMAScript 標準,JavaScript 中只有一種數字型別:基於 IEEE 754 標準的雙精度 64 位二進位制格式的值(-(263 -1) 到 263 -1)。它並沒有為整數給出一種特定的型別。除了能夠表示浮點數外,還有一些帶符號的值:+Infinity,-Infinity 和 NaN (非數值,Not-a-Number)。
123; // 正整數 -123; // 負整數 520.1314; // 浮點數 0; // 零 Infinity; // 正無窮 -Infinity; // 負無窮 typeof Infinity; // number 複製程式碼
布林型別
布林表示一個邏輯實體,可以有兩個值:true 和 false。
2 > 1; // true [] == []; // false [] == ![]; // true 這是為什麼? null == undefined // true '10' > '3'; // flase 這個啥? typeof true; // boolean 複製程式碼
Null 型別
Null 型別只有一個值: null。
null === null; // true typeof null; // object 為什麼不是 null呢? 複製程式碼
Undefined 型別
一個沒有被賦值的變數會有個預設值 undefined。
let a; // 我申明我是一個變數 a typeof a; // undefined 申明未賦值 undefined == undefined; // true undefined == 0; // false undefined == null; // true undefined == ''; // false 複製程式碼
符號型別
符號(Symbols)是ECMAScript 第6版新定義的。符號型別是唯一的並且是不可修改的, 並且也可以用來作為Object的key的值。
let obj = {}; let symbol1 = Symbol(); let symbol2 = Symbol(); typeof symbol1; // symbol typeof symbol2; // symbol symbol1 == symbol2; // false obj.symbol1 = 'hello'; obj[symbol1] = 'world'; console.log(obj.symbol1 + ' ' + obj[symbol1]); // hello world 複製程式碼
引用型別
引用型別
主是指Object型別
。
Object 物件
在電腦科學中, 物件是指記憶體中的可以被識別符號
引用的一塊區域。
let obj1 = {}; // 物件字面量 let obj2 = new Object(); // 例項化一個物件 typeof obj1; // object typeof obj2; // object const person = { author: {name: "布一", "wechat": "Hankewins"}, 1: "No.1" }; console.log(person.author.name); // 布一 console.log(person.author.wechat); // Hankewins console.log(person[1]); // No.1 複製程式碼
型別對比
我們都知道JavaScript中有兩大資料型別:基本型別
和引用型別
,其中基本型別
主要是把值儲存在棧記憶體
中,而引用型別
卻是把地址儲存在棧記憶體
中,把值儲存在堆記憶體
中,然後將棧記憶體
中儲存的地址指向堆記憶體
中儲存的值。
基本型別 | 資料結構 | 儲存位置 |
---|---|---|
基本型別 | 數字、字串、布林、Null、Undefined、Symbol | 棧 |
引用型別 | 陣列、物件、函式 | 棧、堆 |
什麼是堆疊?
堆疊是兩種資料結構,是一種資料項按序排列的資料結構,只能在一端進行插入和刪除操作。堆為佇列優先,先進先出(FIFO)。棧為先進後出(FILO)。