[問題] 初學JavaScript問題

作者: d13751200344 (callmedan)   2022-06-19 00:56:07
各位版上的大神們好,想請問各位:
let age = 27;
age.toString();
if (age===27) {
console.log("number");
} else if (age==="27") {
console.log("string");
} else {
console.log("I don't know.");
}
這個例子中,結果會是『number』,因為 age 是 number,只有 age.toString 是 string 對嗎?
第二個例子:
let friends = ["John", "Sandy", "Alex", "Jim", "Greg"];
let friends = ["John", "Sandy", "Alex", "Jim", "Greg"];
friends.push("Harry");
console.log(friends);
這個例子中,結果會是["John", "Sandy", "Alex", "Jim", "Greg", "Harry"]
但,為什麼第一個例子中 age 使用了 .toString() 後,『age』 本身並沒有變成 string;但在第二個例子中,friends 使用了 .push("Harry") 後,『friends』本身卻改變了?
感謝各位!
作者: kyrc (橘子)   2022-06-19 01:42:00
https://mzl.la/3ybX6zLage = age.toString();
作者: BugofBook (數學書蟲)   2022-06-19 10:03:00
因為number是不可變的,而push不是不可變的method
作者: usagi719 (AztecBunny)   2022-06-19 22:20:00
簡單講,沒有為什麼,原始函式就這麼寫。複雜講,這跟程序員的哲學美學有關。js主推純函式美學,但以前沒有,現在框架array操作方法就會寫immutable的,禁止直接改變array而是return新的array,js有特別優化,使得程式更穩定效率。能用const就用,少用變數
作者: ck574b027 (荒圍!定厝!賊!妹!)   2022-06-20 03:14:00
會對side effect函數設計命名慣例的嚴謹語言本來就不多
作者: laechan (揮淚斬馬雲)   2022-06-20 17:01:00
你只能習慣有些就是這樣,有些就是那樣(如 array.sort() )不想記就是寫code時多花一些時間在debug我是更懶連push是啥平常都沒記,要用時google就好了像VB是Cint/Cstr,到javascript變 parseInt/toString = =若你常寫常用則自然會知道啥時要用 變數=xxx, 啥時不用
作者: ck574b027 (荒圍!定厝!賊!妹!)   2022-06-21 03:49:00
不是吧,在ide看回傳type不就好了
作者: Haneki (低調點,好嗎?)   2022-06-25 12:40:00
string 跟 array 不一樣喔~ 一個是primitive type一個是reference type

Links booklink

Contact Us: admin [ a t ] ucptt.com