一日客家話:月餅 捏ㄅ一ㄤˇngied5biang31
primitives 是不可變
non-primitives 是可變的
他們記憶體的值到底存啥?
為何mdn Primitive values 上寫 no methods 但 string 有方法可以使用?
Primitive values
和Non-primitive
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 有方法可以使用?(先跳過,待會再來討論)
Number — 整數、浮點數
String — 字串
Boolean — true or false
又有特殊型別
Null
Undefined
Symbol(ES6新增)
BigInt
說說 null 奇怪的地方
使用 typeof 可以檢查型別,當使用 typeof null 時會回傳 object
瀏覽器圖示:
Non-primitives
又稱Reference Types/Object typeprimitives之外就是object型別
objects
arrays
functions
可以更改物件的特性和陣列的元素
non-Primitives
和Primitive values
記憶體的值到底存啥?primitive:存值, 是by value,當比較時只要是相同值才會視為相同
object 型別:值是存reference參照(在heap的記憶體位置)
所以物件比較即使擁有相同的特性和值,兩個物件仍不相同,一個存值一個存記憶體位址
null
和undefined
可以代表沒有物件
可以代表沒有值
typeof 是object(特別)
null 是自己型別的唯一成員
null 能代表數字和字串,指的是no value
表示尚未初始化變數的值
是 global object
是不是偷偷做了什麼事?
let myString = 'apple';
console.log(myString.replace('a','ooo'))//ooopple
因為有基本型別包裹器 (Primitive Wrapper)
以下型別會有基本型別包裹器
當企圖使用 primitive 的 property 會短暫的創建 wrapper object
型別會自動轉型(隱含的轉型)為物件型別 :String
、Number
、BigInt
、Boolean
、Symbol
意思是:在執行屬性、方法會使用 new 關鍵字來建構函式
第一句:let myString = 'apple';
當執行第二句:console.log(myString.length);
要執行myString.length!!! 那就要使用new啦
流程:
new 關鍵字:let myString = new String('apple')
myString此刻是物件,可以存取屬性、方法!!
可以執行console.log(myString.length);
執行結束再轉回基本型別
今日學習到這裡~下跪一鞠躬
資料參考:
Mutability Vs Immutability In JavaScript
重新認識 JavaScript: Day 23 基本型別包裹器 Primitive Wrapper
mdn
JavaScript大全
JavaScript # 11 — 基本型別包裹器 (Primitive Wrapper) 、建構式 (Constructor)
create a temporary wrapper object