iT邦幫忙

2021 iThome 鐵人賽

DAY 23
0
Modern Web

後轉前要多久系列 第 23

【後轉前要多久】# Day23 JS - JavaScript 變數、運算

  • 分享至 

  • xImage
  •  

變數

JS目前有三種宣告變數的方法。

在ES5以前都用var,ES6之後推出letconst
新的用法都盡量以 letconst 取代 var
但在舊的專案中還是常看到 var的用法。

const 常數

變數命名通常為大寫開頭、或全大寫加底線。
常數是不可修改的值,在程式執行階段就不會再變動的數,
通常會給一個寫死的值,並且不再變動。

const PI = 3.14159

但有個陷阱,
變數儲存的是物件型別(Object type)時是Call By Reference,
const x = [aObj, bObj...] 時,若有地方修改到了aObj物件本身,
那x物件也會連帶受影響,造成x變動。
物件型別(Object type)

只有原始型別(Primitive type)如數字、字串、布林,是完全無法被修改的。

原始型別(Primitive type)有以下七種
undefinednullbooleannumberstringsymbolbigint

檢測的方式,若扣除掉objectfunction型別 即是原始型別
typeof a == 'object' || typeof a == 'function'

var 變數

全域變數
可重複宣告
為了解決區域變數覆蓋全域變數問題,而推出let

全域變數、可重複宣告,
這兩項特性合併在一起,會產生熟悉其他程式語言寫法的人始料未及的問題。

  • 為什麼i會到11去呢?
for (var i = 0; i <= 10; i++) {
    console.log(i)
}

console.log(i)

為什麼i會到11去呢?

let 變數

區域變數

根據Google的JavaScript style guide,說明我們應該默認用const,
如果該變數需要重新被賦值才用let,永遠不用var。

var同樣的程式碼,在for迴圈外使用到時會出現 ReferenceError
屬於正常範圍

for (let i = 0; i <= 10; i++) {
    console.log(i)
}

console.log(i)

與var同樣的程式碼


null vs undefined 兩者何異

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


if 判斷式

if、else

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");
}

switch

記得結束時要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])

上一篇
【後轉前要多久】# Day22 JS - JavaScript 介紹、Debug方法
下一篇
【後轉前要多久】# Day24 JS - JavaScript 物件、函式
系列文
後轉前要多久30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言