JavaScript和Lua之间的细微差异
我只是喜欢JavaScript。它是如此优雅(想象一下背景中沉迷于爱情的粉丝们发出的安静的叹息声) 所以,最近我通过框架(很好!)使用了Lua,我认为Lua也很棒。在我看来,这两种语言非常相似 有明显的区别,比如JavaScript和Lua之间的细微差异,javascript,lua,Javascript,Lua,我只是喜欢JavaScript。它是如此优雅(想象一下背景中沉迷于爱情的粉丝们发出的安静的叹息声) 所以,最近我通过框架(很好!)使用了Lua,我认为Lua也很棒。在我看来,这两种语言非常相似 有明显的区别,比如 语法 问题域 图书馆 类型(一点) 但哪一个更微妙?JavaScript程序员是否会认为在Lua中工作是理所当然的,只是略有不同?对于一种语言的有经验的程序员来说,尝试另一种语言是否存在任何不明显的陷阱 例如:在Lua中,数组和散列不是分开的(只有表)——在JavaScript中,
- 语法
- 问题域
- 图书馆
- 类型(一点)
但是在变量范围、不变性或类似的东西上有差异吗?老实说,列出Javascript和Lua的共同点要比列出差异更容易。它们都是动态类型化的脚本语言,但这只是你能做到的。它们有完全不同的语法、不同的原始设计目标、不同的操作模式(Lua总是编译成字节码并在Lua VM上运行,Javascript也各不相同),这一列表层出不穷 卢阿
还有一些区别:
- Lua具有对的本地支持。
- 更新:JS现在在生成器中包含yield关键字,支持协同程序
- 任何比较运算符的类型之间的Lua。在JS中,只有
和==
==代码>不要键入“变戏法”
- Lua有一个求幂运算符(
);JS没有。JS使用不同的运算符,包括三元条件运算符(^
vs?:
),以及从5.3开始的按位运算符(和/或
,&
等vs.)。|
- 更新:JS现在具有求幂运算符
**
- 更新:JS现在具有求幂运算符
- JS具有递增/递减、类型运算符(
和typeof
)、附加赋值运算符和附加比较运算符instanceof
- 在JS中,
,==
,==
=代码>和
运算符的优先级低于==
,
,=
JavaScript数组和对象比您想象的更接近。可以使用数组表示法获取其中任意一个的元素,还可以向数组添加非数字索引。单个数组元素可以容纳任何内容,并且数组可以是稀疏的。他们几乎是一模一样的表亲。一些细微的差别至少会让你明白一次:
- 在Lua中拼写为
“不相等”。在JS中它是~=
=代码>
- Lua-他们的第一个索引是1而不是0
- Lua需要冒号而不是句点来调用对象方法。您编写
而不是a:foo()
†a.foo()
†如果需要,可以使用句点,但必须显式传递
变量self
看起来有点麻烦。有关详细信息,请参阅。Lua和JavaScript都是原型基础语言。我喜欢这个问题和提供的答案。这两种语言在我看来更相似的其他原因: 两者 将函数分配给变量, 可以动态构建功能,a.foo(a)
并定义闭包。测试表明,当前Javascript还返回对象,或者至少返回逻辑表达式中的字符串,如lua:function nix(){ alert(arguments[0]||"0"); } nix();
在Lua中,逻辑运算符(and、or)确实返回一个参数。所有函数都可以用任意数量的参数调用;但是被调整到所需的数量(除非您使用…“额外参数”)@RCIX:see luaconf.h(在lua5.2中,也包括lparser.c和llimits.h)。Lua 5.1和Lua 5.2中的最大局部值/函数=200。lua5.1中的Max-upvalues/function=60,lua5.2中的Max-upvalues/function=255(此计数还包括函数内部创建的闭包“继承的”upvalues)。我认为您可以将基于1的数组添加到列表中,当您不习惯时,这可能会非常烦人。Lua中只有nil和false是错误的-例如,0在Lua中是真实的,但在js中不是。关于Unicode支持:Lua5.3添加了一些显式的UTF-8支持,旧的Lua版本对字符串中的UTF-8缓冲区很友好(例如,可以在字符串搜索模式中使用Unicode)。Js对UTF-8的支持并不完美,因为V8内部使用了旧的16位表示,所以您的unicode字符串可能最终会产生(令人惊讶的!)代理项对,而这在好的ol'UTF-8中是不需要的(在Lua中也不会发生)。我喜欢这个列表,但我不知道
如何引起微妙的错误。它可能会引发语法错误,但它们一点也不微妙。非常不同的目标包括拥有一门干净的语言。Javascript有很多历史包袱,Lua不断地丢弃不想要的东西。+1。我甚至看不出它们有什么相似之处,除了它们都用于脚本编写(这太明显了)。-1(如果我可以的话)它们在语言设计方面非常相似。Lua只是有更多的特性,而且更小(也更快?)。我认为你把语言设计和实现选择混淆了。是的,它们都是原型OOP(即使没有使用关键字~=
或nam明确说明)prototype
local i='foo' do local _i=1 while _i<10 do local i=_i ... _i=_i+1 end end print(i)
function nix(){ alert(arguments[0]||"0"); } nix();
- 在Lua中拼写为