前端進階系列(第1期):理解JavaScript數據類型

寫在前面

前端進階系列本着「好好幹前端」的心態,一步一個腳印認真練好前端的基本功,爲在前端的發展道路上作好鋪墊。前端

本週正式開始前端進階的第1期,本週的主題是理解JavaScript數據類型java

數據類型

最新的 ECMAScript 標準定義了7種數據類型,主要分爲兩大類基本類型引用類型git

基本類型

基本類型有時也被稱爲值類型原始類型。其中包括6種數據類型,分別是:字符串類型(String)數字類型(Number)布爾類型(Boolean)對空類型(Null)未定義類型(Undefined)符號類型(Symbol)程序員

字符串類型github

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)。

堆和棧有啥區別?

  1. 空間分配
  • 堆(操做系統):通常由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收,分配方式相似於鏈表。PS:java中都是系統GC,程序員沒法進行GC。
  • 棧(操做系統):由操做系統自動分配釋放,存放函數的參數值,局部變量值等。操做方式與數據結構中的棧相相似。
  1. 緩存方式
  • 堆:使用二級緩存,生命週期與虛擬機的GC算法有關(並非引用爲空就當即被GC),調用速度相對較低。
  • 棧:使用一級緩存,被調用時一般處於存儲空間中,調用後被當即釋放。
  1. 數據結構
  • 堆(數據結構):相似於樹結構,能夠類比於堆排序
  • 棧(數據結構):先進後出(FILO)

總結

本篇文章內容主要告訴咱們如下幾個基本知識點:

  1. JavaScript中有7種數據類型,分爲兩大類:基本類型引用類型
  2. 堆和棧的概念和區別,以及JavaScript中兩大數據類型的存儲方式。
  3. 拋出了一些數據類型轉換時遇到的「奇葩」問題。

針對第3點咱們將在下一章節中重點講解。

參考資料

交流

更多精彩內容請關注個人github博客,若是你以爲還不錯請給個star,很是感謝。

相關文章
相關標籤/搜索