iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0

JS 的資料型態主要分成物件型態及原始型態。

Object 物件型態

物件型態的資料可以使用屬性及方法
ex: 陣列[ ]、物件{ }、函式

Primitive 原始型態

原始型態是一種資料,他不是物件而且也沒有屬性及方法可以用,他的值是唯讀的,記憶體位置都在同個地方,分為 7 大類,其中 BigInt 以及 Symbol 是比較少見的原始型態:

  • 數值(number)
  • 字串(string)
  • undefined
  • null
  • 布林值(boolean)
  • BigInt
  • Symbol

BigInt

用來讓我們能更精確的呈現數字。
number 只能呈現 2的53次方內的值,如果超出這個範圍就要將數值轉換成 BigInt 型態才能正常呈現。
可以在數值後面加一個 n 讓他轉型成 BigInt。

Symbol

ES6 之後才出現的型態,跟字串很像。

  • 差異:

    • 字串的值的記憶體位置不變
      => 如果用不同常數去指向同樣名稱的字串,這兩個常數會是相等的,
      因為字串的記憶體位置是固定的,代表說他們指向同一個值。
    • Symbol 的值的記憶體位置會變
      => 如果用不同常數去指向同樣名稱的 symbol,這兩個常數會是不相等的
      因為符號的記憶體位置是不固定的,代表說他們指向不同的值,變成像是物件一樣。
  • 好處:
    可以讓物件裡面的屬性名稱相同,不會被覆蓋掉。
    如果屬性名稱是用字串寫的話,遇到相同名稱的屬性,後面寫的會覆蓋掉前面寫的。
    但如果屬性名稱是用 symbol 寫的話,就不會發生這個問題,兩個值都會存在。

舉例:

// 符號可以透過Symbol('')產生
// 定義兩個同名符號,賦值給兩個不同常數
const sym1 = Symbol('foo');
const sym2 = Symbol('foo');

// 將他們都轉型成字串
sym1.toString();
sym2.toString();

// 印出 false,代表 sym1、sym2 指向不同值
console.log(sym1 === sym2);
// 印出 true,代表轉成字串後是指向同一個值
console.log(sym1.toString() === sym2.toString());

// 定義兩個同名物件,賦值給兩個不同常數
const obj1 = {'123': 123}
const obj2 = {'123': 123}

// 印出 false,代表 obj1、obj2 指向不同值
console.log(obj1 === obj2)

參考:
[1]MDN:JavaScript 的資料型別與資料結構
[2]重新認識 JavaScript: Day 03 變數與資料型別


上一篇
Day 12 JavaScript var vs let (2)
下一篇
Day 14 JavaScript innerText vs textContent
系列文
網頁前後端寶石庫-礦坑補完計畫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言