JS目前有三種宣告變數的方法。
在ES5以前都用var
,ES6之後推出let
與const
。
新的用法都盡量以 let
與const
取代 var
,
但在舊的專案中還是常看到 var
的用法。
變數命名通常為大寫開頭、或全大寫加底線。
常數是不可修改的值,在程式執行階段就不會再變動的數,
通常會給一個寫死的值,並且不再變動。
const PI = 3.14159
但有個陷阱,
變數儲存的是物件型別(Object type)時是Call By Reference,
當 const x = [aObj, bObj...]
時,若有地方修改到了aObj物件本身,
那x物件也會連帶受影響,造成x變動。
物件型別(Object type)
只有原始型別(Primitive type)如數字、字串、布林,是完全無法被修改的。
原始型別(Primitive type)有以下七種
undefined
、null
、boolean
、number
、string
、symbol
、bigint
檢測的方式,若扣除掉
object
及function
型別 即是原始型別typeof a == 'object' || typeof a == 'function'
全域變數
可重複宣告
為了解決區域變數覆蓋全域變數問題,而推出let
全域變數、可重複宣告,
這兩項特性合併在一起,會產生熟悉其他程式語言寫法的人始料未及的問題。
i
會到11去呢?for (var i = 0; i <= 10; i++) {
console.log(i)
}
console.log(i)
區域變數
根據Google的JavaScript style guide,說明我們應該默認用const,
如果該變數需要重新被賦值才用let,永遠不用var。
與var
同樣的程式碼,在for迴圈外使用到時會出現 ReferenceError
屬於正常範圍
for (let i = 0; i <= 10; i++) {
console.log(i)
}
console.log(i)
null
是故意缺少值,連個零值都沒給。為Object物件
undefined
是東西尚未定義。為Type類型本身
兩者都是沒東西(或稱作false)。
null == undefined // true
null === undefined // false
==
值相等!=
值不等於===
嚴謹比對相同(型別也要相同)!==
嚴謹比對不相同>
大於<
小於>=
大於等於<=
小於等於
1 == '1' // true
1 === '1' // false
'1' === '1' // true
1 == true // true
1 === true // false
1 != '1' // false
1 !== '1' // true
&&
AND||
OR!
NOT
score = 75;
if (score >= 90){
console.log("A");
}else if(score >= 80){
console.log("B");
}else if(score >= 70){
console.log("C");
}else if(score >= 60){
console.log("D");
}else {
console.log("F");
}
記得結束時要break
default
可以放最上面
score = 90;
switch (score) {
case 100:
alert("滿分!");
break
case 99:
case 98:
case 97:
case 96:
alert("接近滿分!");
break
case 95,94,93,92,91,90: // 不建議的寫法
alert("很好!");
break
default:
alert("可以更好");
break
}
判斷範圍
score = 65;
switch (true) {
default:
console.log("F");
break
case score >= 90:
console.log("A");
break
case score >= 80:
console.log("B");
break
case score >= 70:
console.log("C");
break
case score >= 60:
console.log("D");
break
}
var l = [];
l.push(1); // push新增到最後一項
console.log(l);
l.push(2,3,4)
console.log(l);
l[0] = 100; // 修改
console.log(l);
console.log(l.length); // 印出陣列長度
常用來接API、Json格式的檔案
var exam = {}
console.log(exam) // Object{}
exam = {
title: "數學測驗", // 前面物件不需加雙引號
score: 95,
student: "Jason",
nickname: ["Tea", "抹茶"],
}
console.log(exam)
exam.pass = true;
console.log(exam)
console.log("考試名稱: " + exam.title)
console.log("學生綽號: " + exam.nickname[1])