[问题] 初学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