2025年9月24日 星期三

筆記 JavaScript 工程師養成直播班 第一堂

1.let const var
作用區域 重複宣告 重新賦值 變數提升
var 函式作用域
let 區塊作用域 不可
const 區塊作用域 不可 不可
1.const實際上是指到記憶體位址,不能改變的是記憶體位址
2.重新賦值會改變記憶體位址,這樣就不行
3.但可以改值
 const color = "yellow";
//color ="red"; 重新賦值不行
console.log(color);

const colors = ["yellow", "blue", "red"];
colors[0] = "green";//改值可以
console.log(colors);
AI 摘要

「變數提升」(Hoisting)是指在編譯階段,
JavaScript 引擎會將 var 宣告的變數提升(移動)到其作用域的頂端,
但只提升宣告本身,不會執行初始化(賦值)動作。 
因此,在變數實際被賦值之前呼叫它,值會是 undefined,而不是執行時期報錯。

函式作用域(Function Scope)指的是變數的可存取範圍被限制在某個函式內部,
僅在該函式執行時有效。 在JavaScript 中,
使用 var 關鍵字宣告的變數就具有函式作用域的特性。 
這表示在函式外部宣告的變數是全域的,而函式內部的變數則被限制在該函式內部,
無法在外部存取。 
2.typeof(用來顯示型別)
        let a = 1 ;
        console.log(typeof a); //number
        let b = "哈" ;
        console.log(typeof b);  //string
3.數字 number (原始型別),可用typeof === 或是 NaN(Not a Number)
        let a = 0;
        a = a + 50 ;
        a += 50 ; //等同於上方算式
        let a = 0 ;
        a += 1;
        a ++ ; //等同於上方算式
        //直播:後綴++ -- ** 運算後做
        let x = 3;
        let y  = x++; //先給y值後再運算x=x+1
        //x = 4 , y = 3
        //直播:前綴++ -- ** 運算先做
        let a = 2;
        let b  = ++a; //先運算a=2+1後再給b值
        //a = 3 , b = 3
4.字串 string (原始型別)
        let s1 = 's1' ; //單引號
        let s2 = "s2" ; //雙引號
        let go = "let's go"; //基本上一樣,看需求使用
        let name = "Marco" ;
        let content = "Hello";
        console.log(name + content);//字串相加
        let name = " Maroco ";
        console.log(name.length); //字串長度
        name =  name.trim(); //濾掉前後空白
        console.log(name.length);
        let name = "Maroco";
        let age = 19;
        console.log(`您好我叫${name},今年${age}歲`);
        let a = 1 ;
        let b = "哈" ;
        let c =  a + b ;
        console.log(c); // 1哈
        console.log(typeof c); //字串跟數字相加會變成字串 
        let a = 1 ;
        let b = "哈" ;
        let d = a * b ; 
        console.log( d);//NaN 非數字進行運算 
        console.log(typeof d);// number
5.布林 (原始型別)
        let is = 2 > 3; // ture or false
        console.log(is); // false
        console.log(typeof is); // boolean
6.undefined 尚未被賦於值 (原始型別)
        let u;
        console.log(u); // undefined 
        console.log(typeof u); // undefined 
7.null 有被賦於值,後清空,(直播:確定未來有值,但還沒確定) (原始型別)
        let n = [];//內容假裝很多
        n = null;//清空記憶體
8.字串轉文字parseInt、parseFloat
        let s1 = "哈哈";  
        s1 = parseInt(s1);
        console.log(s1); // NaN  
        let s2 = "123"; //從表單抓取資料都是字串所以要轉型
        s2 = parseInt(s2); //parseFloat()有小數點
        console.log(s2); // 123
9.數字轉字串
        let s3 = 123;  
        s3 = s3.toString();
        console.log(s3); // 123  
        console.log(s3 + 9); // 1239 字串+數字= 字串
        console.log(typeof s3) //string 
10.直播補充
1.基本型別"傳值":將原始值複製一份,放到新的記憶體上給新變數用
2.物件型別"傳址":將原變數參考的記憶體位置給到新變數,所以被傳的有修改原來的也會變更
參考資料
六角學院直播課
JS 宣告變數, var 與 let / const 差異