W Apps Script i JavaScript środowisko wykonawcze lub środowisko wykonawcze zawiera mechanizm JavaScript, który analizuje i wykonuje kod skryptu. Środowisko wykonawcze udostępnia reguły dostępu do pamięci, sposobów interakcji programu z systemem operacyjnym komputera oraz legalnej składni. Każda przeglądarka ma swoje środowisko wykonawcze dla JavaScriptu.
W przeszłości skrypt Apps Script był obsługiwany przez algorytm Rhino JavaScript firmy Mozilla. Rhino pozwalał na wygodne wykonywanie skryptów programistycznych Google Apps Script, jednak powiązał też skrypt Apps Script z określoną wersją JavaScriptu (ES5). Deweloperzy Apps Script nie mogą używać bardziej nowoczesnej składni ani funkcji JavaScriptu w skryptach wykorzystujących środowisko wykonawcze Rhino.
Aby rozwiązać ten problem, aplikacja Apps Script jest teraz obsługiwana przez środowisko wykonawcze V8, które obsługuje Chrome i Node.js. Aby skorzystać z nowoczesnej składni i funkcji JavaScriptu, możesz przenieść istniejące skrypty do wersji 8.
Na tej stronie opisujemy nowe funkcje dostępne w wersji 8 i wyjaśniamy, jak włączyć wersję 8 w swoich skryptach. Migracja skryptów do wersji 8 zawiera opis czynności, które trzeba wykonać, aby przenieść istniejące skrypty do środowiska wykonawczego V8.
Funkcje środowiska wykonawczego V8
Skrypty używające środowiska wykonawczego V8 mogą korzystać z następujących funkcji:
Nowoczesna składnia ECMAScript
W skryptach obsługiwanych przez środowisko wykonawcze V8 możesz używać nowoczesnej składni ECMAScript. Ta składnia obejmuje
let
, const
i wiele innych popularnych funkcji.
Zapoznaj się z przykładami składni V8, aby poznać krótką listę popularnych ulepszeń składni, które można wprowadzić za pomocą środowiska wykonawczego V8.
Ulepszone wykrywanie funkcji
Wykrywanie funkcji Apps Script jest udoskonalone w przypadku skryptów korzystających z wersji 8. Nowe środowisko wykonawcze rozpoznaje te formaty definicji funkcji:
function normalFunction() {} async function asyncFunction() {} function* generatorFunction() {} var varFunction = function() {} let letFunction = function() {} const constFunction = function() {} var namedVarFunction = function alternateNameVarFunction() {} let namedLetFunction = function alternateNameLetFunction() {} const namedConstFunction = function alternateNameConstFunction() {} var varAsyncFunction = async function() {} let letAsyncFunction = async function() {} const constAsyncFunction = async function() {} var namedVarAsyncFunction = async function alternateNameVarAsyncFunction() {} let namedLetAsyncFunction = async function alternateNameLetAsyncFunction() {} const namedConstAsyncFunction = async function alternateNameConstAsyncFunction() {} var varGeneratorFunction = function*() {} let letGeneratorFunction = function*() {} const constGeneratorFunction = function*() {} var namedVarGeneratorFunction = function* alternateNameVarGeneratorFunction() {} let namedLetGeneratorFunction = function* alternateNameLetGeneratorFunction() {} const namedConstGeneratorFunction = function* alternateNameConstGeneratorFunction() {} var varLambda = () => {} let letLambda = () => {} const constLambda = () => {} var varAsyncLambda = async () => {} let letAsyncLambda = async () => {} const constAsyncLambda = async () => {}
Wywołuj metody obiektów z aktywatorów i wywołań zwrotnych
Skrypty korzystające z wersji 8 mogą wywoływać metody obiektów i metody statyczne klas z miejsc, w których można było już wywoływać metody biblioteki. Są to między innymi:
- aktywatory pliku manifestu dodatków do Google Workspace.
- Aktywatory do zainstalowania
- Elementy menu w Google Workspace edytorach
- Funkcje wywołania zwrotnego przez użytkownika, takie jak ta opisana w przykładowym kodzie
ScriptApp.newStateToken()
.
Poniższy przykład w wersji 8 ilustruje użycie metod obiektów podczas tworzenia elementów menu w Arkuszach Google:
function onOpen() {
var ui = SpreadsheetApp.getUi(); // Or DocumentApp, SlidesApp, or FormApp.
ui.createMenu('Custom Menu')
.addItem('First item', 'menu.item1')
.addSeparator()
.addSubMenu(ui.createMenu('Sub-menu')
.addItem('Second item', 'menu.item2'))
.addToUi();
}
var menu = {
item1: function() {
SpreadsheetApp.getUi().alert('You clicked: First item');
},
item2: function() {
SpreadsheetApp.getUi().alert('You clicked: Second item');
}
}
Wyświetlanie logów
Apps Script udostępnia 2 usługi logowania: Logger
i klasę console
. Obie usługi zapisują logi w tej samej usłudze Stackdriver Logging.
Aby wyświetlić logi Logger
i console
, u góry edytora skryptów kliknij Dziennik wykonywania.
Wyświetl wykonania
Aby wyświetlić historię wykonywania skryptu, otwórz projekt Apps Script i po lewej stronie kliknij wykonania
.Przykłady składni V8
Poniżej znajduje się krótka lista popularnych funkcji składniowych dostępnych dla skryptów korzystających ze środowiska wykonawczego V8.
let
i const
Słowa kluczowe let
i const
pozwalają definiować odpowiednio zmienne lokalne z zakresu bloku i stałe zakresu blokowania.
// V8 runtime let s = "hello"; if (s === "hello") { let s = "world"; console.log(s); // Prints "world" } console.log(s); // Prints "hello" const N = 100; N = 5; // Results in TypeError |
Funkcje strzałek
Funkcje strzałek umożliwiają kompaktowe definiowanie funkcji w wyrażeniach.
// Rhino runtime function square(x) { return x * x; } console.log(square(5)); // Outputs 25 |
// V8 runtime const square = x => x * x; console.log(square(5)); // Outputs 25 // Outputs [1, 4, 9] console.log([1, 2, 3].map(x => x * x)); |
Zajęcia
Klasy zapewniają środki do koncepcyjnego porządkowania kodu z dziedziczeniem. Klasy w V8 to głównie cukier składniowy, a nie dziedziczenie oparte na prototypie JavaScriptu.
// V8 runtime class Rectangle { constructor(width, height) { // class constructor this.width = width; this.height = height; } logToConsole() { // class method console.log(`Rectangle(width=${this.width}, height=${this.height})`); } } const r = new Rectangle(10, 20); r.logToConsole(); // Outputs Rectangle(width=10, height=20) |
Niszczenie projektów
Zniszczenie struktury wyrażeń to szybki sposób na wyodrębnianie wartości z tablic i obiektów na różne zmienne.
// Rhino runtime var data = {a: 12, b: false, c: 'blue'}; var a = data.a; var c = data.c; console.log(a, c); // Outputs 12 "blue" var array = [1, 2, 3]; var x = a[0]; var y = a[1]; var z = a[2]; console.log(x, y, z); // Outputs 1 2 3 |
// V8 runtime var data = {a: 12, b: false, c: 'blue'}; var {a, c} = data; console.log(a, c); // Outputs 12 "blue" var array = [1, 2, 3]; var [x, y, z] = array; console.log(x, y, z); // Outputs 1 2 3 |
Litery szablonów
Litery szablonów to literały tekstowe umożliwiające umieszczanie wyrażeń. Pozwalają uniknąć bardziej złożonych instrukcji łączenia ciągów znaków.
// Rhino runtime var name = 'Hi ' + first + ' ' + last + '.'; var url = 'http://localhost:3000/api/messages/' + id; |
// V8 runtime var name = `Hi ${first} ${last}.`; var url = `http://localhost:3000/api/messages/${id}`; |
Parametry domyślne
Parametry domyślne pozwalają określić wartości domyślne parametrów funkcji w deklaracji funkcji. Może to uprościć kod w treści funkcji, ponieważ eliminuje konieczność jawnego przypisywania wartości domyślnych do brakujących parametrów.
// Rhino runtime function hello(greeting, name) { greeting = greeting || "hello"; name = name || "world"; console.log( greeting + " " + name + "!"); } hello(); // Outputs "hello world!" |
// V8 runtime var hello = function(greeting="hello", name="world") { console.log( greeting + " " + name + "!"); } hello(); // Outputs "hello world!" |
Ciągi wielowierszowe
Ciągi wielowierszowe możesz definiować za pomocą tej samej składni co litery szablonów. Podobnie jak w przypadku literałów szablonów ta składnia pozwala uniknąć konkatenacji ciągów znaków i uprościć definicje ciągów znaków.
// Rhino runtime var multiline = "This string is sort of\n" + "like a multi-line string,\n" + "but it's not really one."; |
// V8 runtime var multiline = `This on the other hand, actually is a multi-line string, thanks to JavaScript ES6`; |
Włączanie środowiska wykonawczego V8
Jeśli skrypt korzysta ze środowiska wykonawczego Rhino, możesz go przełączyć na wersję V8, wykonując te czynności:
- Otwórz projekt Apps Script.
- Po lewej stronie kliknij Ustawienia projektu .
- Zaznacz pole wyboru Włącz środowisko wykonawcze Chrome 8.
Możesz też określić środowisko wykonawcze skryptu bezpośrednio, edytując plik manifestu:
- Otwórz projekt Apps Script.
- Po lewej stronie kliknij Ustawienia projektu .
- Zaznacz pole wyboru Pokazuj plik manifestu „appsscript.json” w edytorze.
- Po lewej stronie kliknij Edytor
appsscript.json
.
> - W pliku manifestu
appsscript.json
ustaw w poluruntimeVersion
wartośćV8
. - U góry kliknij Zapisz projekt .
W artykule Migracja skryptów do wersji V8 opisano inne czynności, które należy wykonać, aby zapewnić prawidłowe działanie skryptów w wersji V8.
Włączanie środowiska wykonawczego Rhino
Jeśli Twój skrypt korzysta z wersji V8 i chcesz go przełączyć na oryginalne środowisko wykonawcze Rhino, wykonaj te czynności:
- Otwórz projekt Apps Script.
- Po lewej stronie kliknij Ustawienia projektu .
- Odznacz pole wyboru Włącz środowisko wykonawcze Chrome 8.
Możesz też edytować plik manifestu skryptu:
- Otwórz projekt Apps Script.
- Po lewej stronie kliknij Ustawienia projektu .
- Zaznacz pole wyboru Pokazuj plik manifestu „appsscript.json” w edytorze.
- Po lewej stronie kliknij Edytor
appsscript.json
.
> - W pliku manifestu
appsscript.json
ustaw w poluruntimeVersion
wartośćDEPRECATED_ES5
. - U góry kliknij Zapisz projekt .
Jak przenieść istniejące skrypty?
Przewodnik Migracja skryptów do wersji V8 zawiera opis czynności, które należy wykonać, aby przenieść istniejący skrypt do wersji V8. Wiąże się to z włączeniem środowiska wykonawczego V8 i sprawdzeniem skryptu pod kątem znanych niezgodności.
Automatyczna migracja skryptów do wersji V8
Od 18 lutego 2020 r. Google zacznie stopniowo przenosić do wersji 8 istniejące skrypty, które przejdą nasz automatyczny test zgodności. Po migracji skrypty, których dotyczy ten problem, będą nadal działać normalnie.
Jeśli chcesz zrezygnować z automatycznej migracji skryptu, ustaw pole runtimeVersion
w pliku manifestu na DEPRECATED_ES5
. W każdej chwili możesz ręcznie przenieść skrypt do wersji V8.
Jak zgłaszać błędy?
Przewodnik pomocy wyjaśnia, jak uzyskać pomoc w programowaniu na Stack Overflow, przeszukiwać dotychczasowe raporty o problemach, zgłaszać nowe błędy i zgłaszać nowe prośby o dodanie funkcji.