Help us understand the problem. What is going on with this article?

GAS v8ランタイムで新しく書ける構文

この記事の目的

2020年02月から、GASが従来のRhinoエンジンからV8エンジンに対応した。
これにより、最新のJavascriptのモダンな書き方ができるようになった。

この記事はこのバージョンアップでGASがどうなったか、と、モダンな書き方を学習するためのメモ

(公式)スクリプトをV8ランタイムに移行する
https://developers.google.com/apps-script/guides/v8-runtime/migration

注意

誤った内容があるかもしれませんので、閲覧の際は、参考程度にとどめたほうが良いかもしれません。

気を付けること

予約語禁止になった。

Rhinoではある程度許容されていたみたいですが、V8ではより厳密になった。

for each(variable in object)を避ける

for (variable in object) か for~ofを使おう。

使えるようになった構文

let

(MDN) let
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let

変数定義の時にvarのように使う。
letで一度定義した変数は再定義できない。うっかり同じ名前の変数を作成して上書きしてしまったり、といったエラーを防げる。varよりこちらを使っておけば良いのではないかと思う。

let testStr = "Hello!"

const

元々使用できたけど、前は再代入できた。V8になり、本来の定数としての役割になった。
(再代入禁止になった(エラーになる))

const TEST_CONST = "Hello!"

for of

for eachの代わりとなるモダンな書き方

(MDN) for ・・・of
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/for...of

Map()

いわゆるハッシュ配列

(MDN) Mapオブジェクト
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Map

  • 値の追加
    • mapオブジェクト.set()
  • 値の取得
    • mapオブジェクト.get()
  • 値の取得まとめて
    • mapオブジェクト.values()
Map
  const map = new Map();//オブジェクト作成
  map.set("id", 1);
  map.set("name", "suzuki");
  map.set("job", "baseball player");

  console.log(map.get("job"));

  const ids = map.values();
  for (id of ids){
    console.log(id);
  } ; 

アロー関数

コールバック関数を簡略化して書くためによく使われる。

(MDN) アロー関数
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/Arrow_functions

Arrow
  //書き方
  //(引数) => {処理}

  //example1
  const items = ["アイテムA","アイテムB","アイテムC"];
  const findedItem = items.find((item) => {
    return item === "アイテムB";
  });

  console.log(findedItem);
  // >> アイテムB

  //example2
  const getItem = (number = 1) => {console.log(number + 10)};
  getItem();

  //処理が1行なら下記のように{}不要
  const getItem = (number = 1) => console.log(number + 10);
  getItem();

テンプレート文字列

文字列の中に、変数を使える。

(MDN) テンプレート文字列
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/template_strings

テンプレート文字列
let a = 5;
let b = 10;
console.log(`Fifteen is ${a + b} and
not ${2 * a + b}.`);
// "Fifteen is 15 and
// not 20."

Promise

(MDN)Promiseを使う
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Using_promises

(MDN)Promise
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise

await/asinc

(MDN)await
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/await

(MDN)async
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/async_function

class

以前のバージョンでもクラスは作成することが出来た。
classキーワードで作成できるようになった。

スプレッド構文

function myFunction() {
  var a = [1,2,3,4];
  var b = [...a , 5,6];
  Logger.log(b);
}
// (output)[1,2,3,4,5,6]
jooji
業務効率化アプリなんかを作っています。 GoogleAppsScript | Python | Flask | JavaScript | Ruby on Rails | Electron | VBA | Powershell に興味があります。記事へのご指摘ありがとうございます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした