iT邦幫忙

2021 iThome 鐵人賽

DAY 5
0
Modern Web

初學者跪著學JavaScript系列 第 5

初學者跪著學JavaScript Day5 : 資料型別:Primitive values 和 Non-primitive values

一日客家話:月餅 捏ㄅ一ㄤˇngied5biang31

今日學習

  • primitives 是不可變

  • non-primitives 是可變的

  • 他們記憶體的值到底存啥?

  • 為何mdn Primitive values 上寫 no methods 但 string 有方法可以使用?


JavaScript 資料型別分兩種:Primitive valuesNon-primitive

1. primitive 基本型別

mdn:

a primitive (primitive value, primitive data type) is data that is not an object and has no methods.

Q:為何 mdn 上寫 no methods 但 string 有方法可以使用?(先跳過,待會再來討論)

primitive 是 immutable 不可以改變的

  1. Number — 整數、浮點數

  2. String — 字串

  3. Boolean — true or false

又有特殊型別

  1. Null

  2. Undefined

  3. Symbol(ES6新增)

  4. BigInt

說說 null 奇怪的地方

使用 typeof 可以檢查型別,當使用 typeof null 時會回傳 object

瀏覽器圖示:


2. Non-primitives 又稱Reference Types/Object type

Non-primitives 是 mutable 可以改變的

primitives之外就是object型別

  • objects

  • arrays

  • functions

可以更改物件的特性和陣列的元素


3. non-PrimitivesPrimitive values記憶體的值到底存啥?

  • primitive:存值, 是by value,當比較時只要是相同值才會視為相同

  • object 型別:值是存reference參照(在heap的記憶體位置)

    所以物件比較即使擁有相同的特性和值,兩個物件仍不相同,一個存值一個存記憶體位址


4.說說nullundefined

1.null

  • 可以代表沒有物件

  • 可以代表沒有值

typeof 是object(特別)

null 是自己型別的唯一成員

null 能代表數字和字串,指的是no value

2.undefined

表示尚未初始化變數的值

是 global object


Q:為何mdn Primitive values 上寫 no methods 但 string 有方法可以使用

是不是偷偷做了什麼事?

let myString = 'apple';
console.log(myString.replace('a','ooo'))//ooopple

因為有基本型別包裹器 (Primitive Wrapper)

以下型別會有基本型別包裹器

  • String for the string primitive.
  • Number for the number primitive.
  • BigInt for the bigint primitive.
  • Boolean for the boolean primitive.
  • Symbol for the symbol primitive.

當企圖使用 primitive 的 property 會短暫的創建 wrapper object


簡單介紹wrapper object

型別會自動轉型(隱含的轉型)為物件型別 :StringNumberBigIntBooleanSymbol

意思是:在執行屬性、方法會使用 new 關鍵字來建構函式


第一句:
let myString = 'apple';

當執行第二句:
console.log(myString.length);

要執行myString.length!!! 那就要使用new啦

流程:

  1. new 關鍵字:let myString = new String('apple')

  2. myString此刻是物件,可以存取屬性、方法!!

  3. 可以執行console.log(myString.length);

  4. 執行結束再轉回基本型別

今日學習到這裡~下跪一鞠躬

資料參考:
Mutability Vs Immutability In JavaScript
重新認識 JavaScript: Day 23 基本型別包裹器 Primitive Wrapper
mdn
JavaScript大全
JavaScript # 11 — 基本型別包裹器 (Primitive Wrapper) 、建構式 (Constructor)
create a temporary wrapper object


上一篇
初學者跪著學JavaScript Day4 : 宣告:let、const
下一篇
初學者跪著學JavaScript Day6 : Template literals 和 Tagged template 傻傻分不清楚
系列文
初學者跪著學JavaScript30

2 則留言

0
Chiahsuan
iT邦新手 5 級 ‧ 2021-09-20 13:04:39

原來是這樣~~~感謝創世神解惑
想瞧瞧你跪完30天後的膝蓋 XD
/images/emoticon/emoticon37.gif

wendy iT邦新手 5 級 ‧ 2021-09-21 14:05:46 檢舉

可能流血不止

0
Hooo
iT邦新手 5 級 ‧ 2021-09-20 17:58:55

想聽客家純血的月餅發音

wendy iT邦新手 5 級 ‧ 2021-09-21 14:04:25 檢舉

哈哈 我居然可以回覆了 我可以請google小姐唸給你聽

我要留言

立即登入留言