JavaScript和Lua之间的微小差异

我非常喜欢 JavaScript。它非常优雅(想象一下迷恋迷妹的静静叹息声)。

最近,我通过 löve2d 框架开始接触 Lua(确实很好!),我认为 Lua 也很棒。我认为这两种语言非常相似。

显然,它们之间有明显的不同,比如:

  • 语法
  • 问题域
  • 类型(稍微有些区别)

但是有哪些更微妙的区别呢?有没有什么是 JavaScript 程序员认为理所当然的,但在 Lua 中稍稍有些不同的呢?有没有什么陷阱可能不会明显地出现在尝试另一种语言的有经验的编码人员面前?

例如:在 Lua 中,数组和哈希表不是分离的(只有表)-而在 JavaScript 中,它们是数字数组和哈希对象。好的,这是更明显的差异之一。

但是,变量作用域、不可变性或类似的东西是否有差异呢?

原文链接 https://stackoverflow.com/questions/1022560

点赞
stackoverflow用户92516
stackoverflow用户92516

说实话,列出JavaScript和Lua共同点要比列出不同点容易得多。它们都是动态类型的脚本语言,但真正的区别到此为止了。它们有完全不同的语法,不同的最初设计目标,不同的操作模式(Lua始终编译为字节码并在Lua VM上运行,而JavaScript则不同),一直列下去。

2009-06-20 21:48:31
stackoverflow用户122428
stackoverflow用户122428

直接翻译成中文,保留 markdown 格式:

Off the top of my head

Lua ...

  1. 支持 协程
  2. 对于表的键,Lua 没有限制只能使用字符串/数字。一切都能工作。
  3. 错误处理有些繁琐。要么不处理任何东西,要么使用 pcall 方法。
  4. 我记得有关于词法作用域的差异的说明,并且 Lua 有更好的词法作用域。
  5. 如果我没记错,Lua 对正则表达式的支持是有限制的。
2009-06-20 22:11:22
stackoverflow用户61027
stackoverflow用户61027

JavaScript 的数组和对象比你想象的更相近。你可以使用数组符号来获取它们的任何一个元素,并且你可以在数组中添加非数字索引。单个数组元素可以持有任何内容,并且数组可以是稀疏的。它们几乎是完全相同的近亲。

2009-06-20 22:15:01
stackoverflow用户4596
stackoverflow用户4596

下面有几个细微的差别,至少会让你犯迷糊一次:

  • 在 Lua 中,“不等于”用 ~= 表示。在 JS 中则是 !=
  • Lua 的数组是基于 1 的,而不是 0。详见数组部分
  • Lua 调用对象方法需要用冒号(:)而不是点号(.)写。你需要写 a:foo() 而不是 a.foo()

† 如果你想要用点号,可以用 self 参数显式传递。但是 a.foo(a) 看起来有点臃肿。详见Programming in Lua

2009-06-22 06:15:40
stackoverflow用户88888888
stackoverflow用户88888888

Lua 和 JavaScript 都是基于原型的语言。

2009-07-03 09:21:20
stackoverflow用户1103700
stackoverflow用户1103700

我喜欢这个问题和提供的答案。以下是两种语言相似的其他原因:

  • 两者都可以将函数赋值给变量
  • 可以动态构建函数
  • 定义闭包。
2011-12-22 08:09:28
stackoverflow用户1173638
stackoverflow用户1173638

一项测试表明,当前的 JavaScript 在逻辑表达式中返回对象或者至少返回字符串,就像 Lua 一样:

function nix(){
    alert(arguments[0]||"0");
}
nix();
2012-09-17 11:59:05