JavaScriptが大好きです。それはとてもエレガントです(バックグラウンドで恋をしたファンボーイのため息が静かな音を想像してください)。
だから、最近、私は löve2d フレームワークを介してLuaで遊んだ(いいね!)-そしてLuaも素晴らしいと思う。私の見たところ、これらの2つの言語はとても似ています。
明らかな違いがあります
しかし、より微妙なものはどれですか? JavaScriptコーダーがLuaでわずかに異なる動作をするのに当たり前のことと思っているものはありますか?ある言語の経験豊富なコーダーが他の言語を試してみても明らかではないかもしれない落とし穴はありますか?
例:Luaでは、配列とハッシュは分離されていません(テーブルのみがあります)-JavaScriptでは、数値配列とハッシュオブジェクトです。さて、これは明らかな違いの1つです。
しかし、変数スコープ、不変性、またはこのようなものに違いはありますか?
少なくとも一度はあなたを見つけるいくつかの微妙な違い:
~=
_と綴られます。 JSでは_!=
_a:foo()
の代わりにa.foo()
と書く †† 必要に応じてピリオドを使用できますが、self
変数を明示的に渡す必要があります。 a.foo(a)
は少し面倒に見えます。詳細については、 Luaでのプログラミング を参照してください。
正直に言うと、違いをリストするよりもJavascriptとLuaに共通するものをリストする方が簡単です。どちらも動的に型指定されたスクリプト言語ですが、実際に実行できる範囲内です。完全に異なる構文、異なる元の設計目標、異なる動作モード(Luaは常にバイトコードにコンパイルされてLua VM上で実行され、Javascriptは異なります)があり、リストは延々と続きます。
JavaScriptの配列とオブジェクトは、思っているよりも近いです。配列表記を使用して、いずれかの要素を取得できます。また、配列に非数値インデックスを追加できます。個々の配列要素は何でも保持でき、配列はまばらになります。彼らはほぼ同一のいとこです。
私はこの質問と提供された回答が気に入りました。 2つの言語が私よりも似ているように見える追加の理由:
どちらも関数を変数に割り当て、その場で関数を構築し、クロージャーを定義できます。
テストにより、現在のJavascriptもオブジェクト、または少なくともluaのような論理式からの文字列を返すことが明らかになりました。
function nix(){
alert(arguments[0]||"0");
}
nix();
LuaとJavaScriptはどちらもプロトタイプの基本言語です。