記錄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
30js array
JS Array1
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
9if 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) endjavascript
1
2
3
4
5
6
7
8
9
10
11
12
13if (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
7function add (a)
local sum = 0
for i,v in ipairs(a) do
sum = sum + v
end
return sum
endjavascript
1
2
3
4
5
6
7
8
9
10
11function 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
7var 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
14local 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 的单行注释语句以双连接符 // 開頭