GAS (Google Apps Script) は、JavaScript がベースになっていて、記法や構文も JavaScript と共通のものが多々あります。
Basic JavaScript features
Apps Script is based on JavaScript 1.6, plus a few features from 1.7 and 1.8. Many basic JavaScript features are thus available in addition to the built-in and advanced Google services: you can use common objects like Array, Date, RegExp, and so forth, as well as the Math and Object global objects. However, because Apps Script code runs on Google’s servers (not client-side, except for HTML-service pages), browser-based features like DOM manipulation or the Window API are not available.
とあるように、GAS で使える JavaScript の機能は、JavaScript 1.6 と JavaScript 1.7 から 1.8 の新しい機能です。
ただ、すべての機能を使えるようではないようなので、注意が必要です。
Iterators and generators
Iterators
next: function() { ~ { value: xxx, done: yyy } }
の構文は使うことができます。
Generator functions
function* ~ yield
の構文を使うと、
関数のパラメータの前に ( がありません。(行 21、ファイル「generator」)
というエラーになり、保存できません。
Array comprehensions
下記の通り obsolete されているようですが、一応調べてみました。
Obsolete since Gecko 58 (Firefox 58 / Thunderbird 58 / SeaMonkey 2.55)
This feature is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time. Try to avoid using it.
結果、
構文エラー。(行 2、ファイル「arraycomprehensions」)
というエラーになり、保存できません。
代わりに、map() や filter() は、アロー関数を使わなけば動きました。
let statement
ステートメントの前に ; がありません。(行 2、ファイル「let」)
というエラーになり、保存できません。
const statement
動作しましたが、const 変数に代入しても TypeError は発生しませんでした。
代入しても変数の値自体は保護されていて、元の値を保ちます。
Destructuring assignment
[a, b] = [10, 20];
のような Array 要素ごとの代入は動きましたが、
[a, b, ...rest] = [10, 20, 30, 40, 50]
のような Array 要素ををまとめてオブジェクトに代入する記述は
構文エラー。(行 11、ファイル「destructuring assignment」)
となり保存できませんでした。
Expression closures
関数の本文の前に { がありません。(行 3、ファイル「expression closures」)
というエラーになり、保存できません。
Array.prototype.reduce()
アロー関数を使わなければ動きました。
Array.prototype.reduceRight()
アロー関数を使わなけば動きました。
まとめ
GAS 使えない機能や構文を使うと、JavaScript のコードとしては正しいのにうまく動かないので、デバッグが大変になります。
構文エラーで保存できない場合は、GAS で使えない構文なのかを確認してみるとよいでしょう。