js-lua

記錄js跟lua基本語法用法比較


更新記錄

item note
20160818 第一版

目錄


變數

變數型態

item lua javascript
1 eight basic types in Lua 1-基本(Primitive)資料型態 (number、string、boolean)
nil, boolean, number, string, userdata, function, thread, table 2- 複合(Composite)資料型態
3-兩個特殊的值 null 與 undefined
arrar index 由1開始 由0開始
  • lua arrary

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ cat array-t1.lua 
    local t = {10, 20, 30}
    print(#t)
    print(t[1])
    print(t[2])
    print(t[3])

    xx :[~]# lua array-t1.lua
    3
    10
    20
    30
  • js array
    JS Array

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ cat array-t1.js 
    var t = Array(10, 20, 30);
    console.log(t.length)
    console.log(t[0]);
    console.log(t[1]);
    console.log(t[2]);

    $ node array-t1.js
    3
    10
    20
    30

定義變數

js: 永遠應該加上分號,即便JavaScript解析器會隱含的補上

item lua javascript
1 a = “hello” a = “hello”
2 a = “hello”; a = “hello”;
可以使用分號(semicolon)也可以不使用分號 JavaScrpt允語你在行尾遺漏分號,還會自動幫你加一個
全域/區域變數 預設為全域變數 全域變數 - 若變數是在函數之外宣告
區域變數 - 若變數是在函數之內宣告
3. local a = “hello”; var a = “hello”;
lua用local定義區域變數 var定義全域變不可以刪除
不使用var定義全域變數(即不小心在函數中產生)可以刪除

功能

item lua javascript
打印 print(a) console.log(a)
註解 - - //

Control Structures

  • lua

    1
    2
    3
    4
    5
    6
    7
    8
    9
    if a < 0 then a = 0 end
    if a < b then return a else return b end
    if line > MAXLINES then
    showpage()
    line = 0
    end


    for i=10,1,-1 do print(i) end
  • javascript

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if (true) {
    alert("It's TRUE!");
    }

    if (true) {
    alert(1);
    } else {
    alert(2);
    }

    for (var i = 0; i < 10; i += 1) {
    alert(1);
    }

Function

  • lua

    1
    2
    3
    4
    5
    6
    7
    function add (a)                                                                                                                       
    local sum = 0
    for i,v in ipairs(a) do
    sum = sum + v
    end
    return sum
    end

  • javascript

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function isWinner(player, others) {
    var highest = 0;
    for (var i = 0, n = other.length; i < n; i++){
    var player = other[i];
    if(player.score > highest){
    highest = player.score;
    }
    }

    return player.score > highest;
    }

Object

  • javascript
    1
    2
    3
    4
    5
    6
    7
    var apple = {
    type: "macintosh",
    color: "red",
    getInfo: function () {
    return this.color + ' ' + this.type + ' apple';
    }
    }

Variable Hositing

  • lua錯誤
    在fact(n-1)時fact尚未定義,看來lua是無js的variable hositing方式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    local fact = function (n)
    if n == 0 then return 1
    else return n*fact(n-1)
    end
    end

    print(fact(3))

    # lua local-fu.lua
    lua: local-fu.lua:3: attempt to call global 'fact' (a nil value)
    stack traceback:
    local-fu.lua:3: in function 'fact'
    local-fu.lua:7: in main chunk
    [C]: ?
  • 此方式的寫法在node js是沒問題,看來lua及node js還有些不同

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $ cat local-t1.js 
    var fact = function (n) {
    if(n == 0){
    return 1;
    } else {
    return n*fact(n-1);
    }
    }

    console.log("tt");
    console.log(fact(3));

    $ node local-t1.js
    tt
    6

如何定義-註解

  • lua 單行註解
    Lua 的单行注释语句以双连接符 - - 開頭

  • lua 多行註解

    1
    2
    3
    --[[ 
    print(10) -- no action (comment)
    --]]
  • js 單行註解
    js 的单行注释语句以双连接符 // 開頭


參考來源