# Day JavaScript 的資料型態 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 寫的話,就不會發生這個問題,兩個值都會存在。 舉例: ```=js // 符號可以透過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) ``` --- ###### tags: `13th鐵人賽` `網頁前後端寶石庫-礦坑補完計畫`