作用區域 | 重複宣告 | 重新賦值 | 變數提升 | |
---|---|---|---|---|
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); //string3.數字 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 = 34.字串 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);// number5.布林 (原始型別)
let is = 2 > 3; // ture or false console.log(is); // false console.log(typeof is); // boolean6.undefined 尚未被賦於值 (原始型別)
let u; console.log(u); // undefined console.log(typeof u); // undefined7.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); // 1239.數字轉字串
let s3 = 123; s3 = s3.toString(); console.log(s3); // 123 console.log(s3 + 9); // 1239 字串+數字= 字串 console.log(typeof s3) //string10.直播補充
1.基本型別"傳值":將原始值複製一份,放到新的記憶體上給新變數用 2.物件型別"傳址":將原變數參考的記憶體位置給到新變數,所以被傳的有修改原來的也會變更參考資料
六角學院直播課
JS 宣告變數, var 與 let / const 差異