[JavaScript] Primitive type(原型)和Object Type

JavaScript

相關文件參考:MDN


Primitive type

immutable, call by value

口訣:UBBNNSS

U:Undefined,變數沒被assigned value時,為undefined

B:Boolean

B:BigInt (少遇到...)

N:Null,null用於表示該object value為空(有被assigned一個value為"null",不是undefined)

N:Number

S:String

S:Symbol,屬於創建後唯一且不可被改變的原型值,不適用new Symbol(" your_symbol ")

// Here are two symbols with the same description:
let Sym1 = Symbol("Sym")
let Sym2 = Symbol("Sym")

console.log(Sym1 === Sym2) // returns "false"
// Symbols are guaranteed to be unique.
// Even if we create many symbols with the same description,
// they are different values.


非Primitive type的,就是Object type

a value in memory, call by reference


call by reference在JavaScript指的是call記憶體位置


所以當copy by reference時,由於y也是指向x的記憶體位置


當y在不創建新Object占用新的記憶體位置的情況下,進行數值變動


此時x的值顯示也會跟著變動,因為x、y同個reference(記憶體位置)

const x = { apple: "$40" };
const y = x;
y.apple = "$20";
console.log(x); //{ apple: '$20' }


但假如y是以創建新Object的方式,x是不會被變動的(記憶體位置所存的值沒被修改到)

const x = { apple: "$40" };
var y = x; //其實這一行結果上是冗的
y = { apple: "$20" };
console.log(x); //{ apple: '$40' }



測試是否搞懂了(source)

//題目
function changeStuff(a, b, c) {
  a = a * 10;
  b.item = "changed";
  c = { item: "changed" };
}

var num = 10;
var obj1 = { item: "unchanged" };
var obj2 = { item: "unchanged" };

changeStuff(num, obj1, obj2);

//請開始你的表演
console.log(num);
console.log(obj1.item);
console.log(obj2.item);




Answers

10
changed
unchanged
© 2021 Hamsterism. All rights reserved github