从js到lua
为了搞unity的热更新,可能需要用到lua.
lua是什么东西?一种脚本语言。脚本语言一般轻量, 简单.
js大家都很熟悉吧。因此我拿它与lua对比
相同点-----------------------------------------------------
基本类型都差不多,追求简单。
string / string
number / number 都没有int, double等,是不是很简单呀
boolean / boolean
function / function 都是作为第一类,也可作为参数,可变参数也都是...
object / table property/metatable 原型链 __index里面的元素不被修改
null | underfined / nil
var | let / local 定义变量的方式差不多(期版本,如果不定义变量,就是全局属性和lua类似)
async / coroutine 都有协程
window|global/_G 定义的全局变量
... | ... 可变参数
不同点----------------------------------------------------
js有变量提升 lua没有变量提升
js==,===,!=和!==运算符的优先级低于>,>=,<,<=。 lua中 所有比较运算符都具有相同的优先级。
js中数组的下标 从0开始 lua中数组的下标从1开始
js全局变量存在window中 lua全局变量存在_G中
js模块化 import/export lua模块化require/return(实质上就是函数)
js块是放在{}中的 lua中块是以end结束
js的运算符+有两重性(连接符,运行算), lua的运算符+只表示运算符,lua的连接符用...
js判断相等 “5”==5 true lua判断相等 "5"==5 false;
js判断不等 5 != "5" lua判断不等 5 ~= "5"
js逻辑运算符&& || ! lua逻辑运算符 and or not
js正则表达式转义字符用\ lua正则表达式转义字符用%
js有表示空有两种null, underfined lua表示空用用nil
js表示串块`` lua表示字符串块 [[]]
js表里的初始索引以0开始 lua表里的初始索引以1开始
js有array类型 lua里没有,用table充当
js有局部变量/全局变量通过作用域区分 lua通过关键字区分
js中对象参与计算 valueOf/toString lua 通过 setmetatable({},{__add})
js中属性调用方法 array. / str. lua中 table(arr,), sting(str, )
js中有switch,continue,i++,三元去处符等 lua中没有
---tabel相关的方法--- 很简单 concat,insert,remove,sort
1:js arr转化为字符串 arr.join(",") lua 中数组转化为字符串 table.concat(table, ",")
2:js arr插入,删除 shift,pop,splice,unshift,push lua中 tabel.insert(tabel, ele), tabel.remove(tabel, ele)
3:js排序 arr.sort lua中 table.sort(table, ...)
---function相关的方法---
1:js函数作为第一对象 lua函数作为第一对象
2:js函数有作用域 var lua函数也有作用域 local
3:js闭包,所谓的闭包就是用域产生的 lua与js的闭包一样
---调试---
lua是比js更严谨的语言,不是所有的东西都能参与计算,如果table要参与计算,请借助于元表
用next找不到是会报错的
总结
lua比js更简单。。。,如果你真的理解了js, 那你也就会了lua.
lua就是缩量版的js, 怎么说呢?
>去掉了变量提升
>去掉了操作符的多义性(js的很多符号有两重性+,lua中没有)
>弱化了原型链(虽然思想都差不多,但是lua的原型链还是弱了点)
>简化了api
还是那句话
如果你真的精通js,那么半小时lua就入门了