Unity 2022.2 から emscripten が 3.1.8 にバージョンアップしてるので、 どれだけ .jslib の関数内 で使用できる ES6+ 構文があるのか思いつく範囲で簡単に調べてみた。
大抵のものは使用できるようになったけど、一部まだ使えなかった。
(もしかすると、.jslib 関数以外で使えない場面もあるかもしれないが今回はそこまで深く調べてない)
使用しても問題ない ES6+ 構文
説明 | 例文 | |
---|---|---|
🟢 | テンプレートリテラル (Template Literals) (複数行も可) | let a = '123'; let b = `\${a}, \${a}`; let c = `aaa bbb`; |
🟢 | アロー関数 (Arrow Functions) | const a = () => console.log('hoge'); |
🟢 | 短いオブジェクトのメンバー関数定義構文 | const a = { hoge(){} }; |
🟢 | 変数宣言での let / const ステートメント | let a; const b = 'hoge'; |
🟢 | 分割代入 (Destructuring assignments) | let [a, b] = [1, 2]; let {a, b} = {a:1,b:2}; |
🟢 | for of ループ | for(let [i, v] of [1,2,3].entries()){ console.log(i, v); } |
🟢 | 配列でのスプレッド構文 | let a = [1, 2, 3]; let b = [...a, 4, 5, 6]; |
🟢 | クラス (Class) | class Hoge { } let Hoge = class { } |
🟢 | クラス プロパティ getter / setter | class Hoge { get fuga(){ return this._fuga; } set fuga(val){ this._fuga = val; } } |
🟢 | 派生クラス (Extended class) | class Fuga extends Hoge { } |
🟢 | 残余引数 (Rest parameters) | const a = (a, b, ...c) => console.log(a, b, c); a(1,2,3,4); |
🟢 | jslib メンバー関数定義で 残余引数 (Rest parameters) | mergeInto(LibraryManager.library, { hoge: function(a, b, ...c){ console.log(a,b,c); } }); |
🟢 | スプレッド構文での引数渡し | Math.min(...[33,22,44]); |
🟢 | 名前付き引数 | const a = ({b, c, d}) => { console.log(b, c, d); }; a({b:1, c:2, d:3}); |
🟢 | デフォルト引数 (Default parameters) | const a = (a, b, c = 'hoge'); a('a','b'); |
🟢 | デフォルト引数 (Default parameters) を jslib のメンバー関数定義で使用 | mergeInto(LibraryManager.library, { hoge: function(a, b, c = 'hoge'){ console.log(a,b,c); } }); |
使用したらエラーになる ES6+ 構文
コンパイルエラー | 実行時フリーズ | コンパイルすると消える | 説明 | 例 |
---|---|---|---|---|
❌ | jslib のメンバー関数定義にアロー関数を使用 | mergeInto(LibraryManager.library, { hoge: () => {} }); |
||
❌ | 短いオブジェクトのメンバー関数定義構文を jslib のメンバーで使用 | mergeInto(LibraryManager.library, { hoge(){} }); |
||
❌ | オブジェクトでのスプレッド構文 | let a = {a:1,b:2,c:3}; let b = {...a,d:4,e:5,f:6}; |
||
❌ | クラスのフィールドメンバー定義 | class Hoge{ fuga; } |
||
❌ | クラスのプライベート関数提議 | class Hoge{ #fuga(){} } |
||
❌ | オブジェクトの動的プロパティ (Dynamic properties) | let a = 'hoge'; const b = { [a]:'fuga' }; |
||
❌ | クラスをこういった場所で定義 | const lib = {}; class Hoge{} mergeInto(LibraryManager.library, lib}); |