Skip to content

Instantly share code, notes, and snippets.

@taiansu
Last active December 19, 2019 02:55
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save taiansu/62e0e772b6c4efbf62ffacb3f520317b to your computer and use it in GitHub Desktop.
Save taiansu/62e0e772b6c4efbf62ffacb3f520317b to your computer and use it in GitHub Desktop.
JavaScript Expression

什麼是表達式: Expression

最後會回傳一個值 (包括 null) 的 JavaScript 語法

2 // 數字

1 + 1 // 數學運算

"str" // 字串

"str" // 字串相加

myFun() // 函式呼叫

anotherFun(1) // 帶參數的函式呼叫

myAry[1] // 取 Array 的值

myArray.length // 取物件的值 (dot notation)

myArray['length'] // 取物件的值 (barcket notation)

console.log('lalala') // 也是函式呼叫,但是會回傳 null

function(x) { /* do something */ } // 函式定義,回傳一個 [Function]

[] // 定義新的空 Array

[1, 2, 3] // 定義新的 Array

{} // 定義新的空件

{a:1, b: 2, c: 3} // 定義新的物件

許多時候,你會在表達式前面放一個變數指派,來把結果接起來。

var x = 2

但是你也可以直接把表達式放到其它需要值的地方

var x = [1, 2, 3 * 10]

var myObject = {
  myName: getFullName("John", "Doe")
}

myObject[myFun("a")] = myFun2(100 * x[1])
// 不好的示範。很難讀懂。你能夠這麼做不代表你就應該這麼做。
// 你的 code 應該表現你的意圖

不是 expression,這個叫 statement

var a = 1 整句不會回傳值

但是單純指派,會回傳被指派的值。是 expression

a = 1 指派會回傳值

不是 expression,這些叫 special form

for 迴圈

    for (var i = 0, len = Things.length; i < len; i++) {
      // body
    }

for 迴圈只能放用兩個分號隔開的三個表達式,有些可以留空 第一部份是設定初始值,只會執行一次,(可以放無關的初始值設定) var i = 0, len = Thing.length 第二部分是每次累進後,進行驗證條件是否依然符合,若不符合則停止迴圈 i < len 第三部份是累進規則,每跑完一圈則會運行這段,再進行驗證,(可以無關的表達式) i++

因為是 special form,所以你不能這樣:

var x = for (var i = 0; i < 5; i++) {}

if, while, do/while

    if (boolean) {
      //body
    } else if (boolean) {
      //body
    }

    while (boolean) {
      //body
    }

    do {
      //body
    } while (boolean);

boolean 可以是任何表達式, 用結果的真假值判斷是否要執行。 只有結果是 false, 0, null, undefined 這四種不執行

因為是 special form,所以你不能這樣:

var x = if(true) { 100; }

switch/case

    switch (value) {
      case 'value1':
          break;
      case 'value2':
        break;
      default:
        break;
    }

value, value1, value2 可以是任何表達式

同理,你也不能這樣

var x = switch(value) { 
  default:
    break;
}

其它 expressions 的解釋

Function

  • 定義 definition

      function myFun(param1, param2, param3 = 3) {
        // body
      }
    

    parameters (param1, param2, param3)只能放參數名稱,用逗號隔開, 新版可以有等號,後面放值

  • 呼叫 call or apply -> function application

      myFun(args)
    

    arguments (args) 可以是任何表達式, 但需符合 myFun 定義的要求才會正常運作

Array / List

  • 定義 definition

    var x = [value1, value2]
    var s = new Set([value1, value2])
    

value1, value2 可以是任何表達式

  • 讀寫 get & set

    x[index1]
    
    x[index1] = 'new value'
    

index1 可以是任何表達式,但結果是數字才能正常運作

Object / Map

  • definition

    var obj = {
      "key1": value1,
      "key2": value2,
      "key3": value3,
    }
    
    var m = new Map()
    

key1, key2, key3 只能是字串 value1, value2, value3 可以是任何表達式

  • get & set

    • bracket notation

      obj["key1"]
      
      obj["key1"] = value
      

key1 可以是任何表達式,但結果是字串才能正常運作 value 可以是任何表達式

* dot notation

      obj.key1

      obj.key1 = value

key1 無法求值,直接找是否存在該 key1,不存在回傳 null。 value 可以是任何表達式

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment