Przegląd środowiska wykonawczego V8

W Apps Script i JavaScript środowisko wykonawcze lub środowisko wykonawcze zawiera czyli silnik JavaScript, który analizuje i wykonuje kod skryptu. Środowisko wykonawcze zapewnia dotyczące dostępu do pamięci, sposobu interakcji programu z pamięcią system operacyjny komputera i jaka składnia programu jest legalna. W każdej sieci przeglądarka ma środowisko wykonawcze dla JavaScriptu.

W przeszłości Apps Script opierał się na języku JavaScript Rhino firmy Mozilla tłumaczem ustnym. Z kolei Rhino zapewnił wygodny sposób wykonywania skryptów Apps Script. skryptów programisty, a także powiązać Apps Script z konkretną wersją JavaScriptu. (ES5). Programiści Apps Script nie może używać bardziej nowoczesnej składni ani funkcji JavaScript w skryptach używających Rhino. w środowisku wykonawczym.

Aby rozwiązać ten problem, program Apps Script jest teraz obsługiwany przez Środowisko wykonawcze V8, które obsługuje Chrome i Node.js. Dostępne opcje migracja istniejących skryptów do wersji 8 do wykorzystania nowoczesnej składni i funkcji JavaScriptu.

Na tej stronie opisujemy nowe funkcje dostępne w V8 i sposób ich włączenia których użyjesz w skryptach. Migracja skryptów do wersji 8 zawiera opis czynności migracji istniejących skryptów do środowiska wykonawczego V8.

Funkcje środowiska wykonawczego V8

Skrypty korzystające ze środowiska wykonawczego V8 mogą korzystać z następujących funkcje:

Nowoczesna składnia ECMAScript

Możesz używać nowoczesnego ECMAScript w skryptach obsługiwanych przez środowisko wykonawcze V8. Ta składnia obejmuje let, const i wiele innych popularnych funkcji.

Zapoznaj się z przykładami składni V8, aby zobaczyć krótką listę popularnych nazw ulepszenia składni, które można wprowadzić za pomocą środowiska wykonawczego V8.

Ulepszone wykrywanie funkcji

Wykrywanie funkcji Apps Script zostało ulepszone w przypadku skryptów korzystających z wersji 8. Nowy ś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 używające V8 mogą wywoływać metody obiektów i klasy statyczne metody z miejsc gdzie można było wywoływać metody biblioteki. Miejsca te to m.in. :

Poniższy przykład w V8 pokazuje wykorzystanie metod obiektów podczas konstruowania pozycje 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świetl logi

Apps Script udostępnia 2 usługi logowania: usługa Logger oraz console zajęcia. Obie te usługi zapisz logi na tym samym usługę Stackdriver Logging.

Aby wyświetlić logi Logger i console, u góry edytora skryptów kliknij Dziennik wykonywania.

Wyświetl uruchomienia

Aby wyświetlić historię wykonywania skryptu, otwórz projekt Apps Script i pod adresem Po lewej stronie kliknij Uruchomienia .

Przykłady składni V8

Oto krótka lista popularnych funkcji składniowych dostępnych w używające środowiska wykonawczego V8.

letconst

let i const słowa kluczowe pozwalają definiować zmienne lokalne i zakres blokowy wartości stałe.

// 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 pozwalają w kompaktowy sposób definiować funkcje 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

Zajęcia zapewniają sposób koncepcyjnego porządkowania kodu przez dziedziczenie. Klasy w V8 są głównie cukrem syntaktycznym zamiast dziedziczenia opartego na prototypie JavaScript.

// 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 przypisań

Zniszczenie przypisania Wyrażenia to szybki sposób na rozpakowywanie wartości z tablic i obiektów dla różnych zmiennych.

// 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


      

Literały szablonów

Literały szablonów to literały łańcuchowe, które pozwalają na osadzone wyrażenia. 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ć domyślne wartości parametrów funkcji w funkcji tej deklaracji. Może to uprościć kod w treści funkcji, ponieważ usuwa on przypisać wartości domyślne 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

Możesz zdefiniować ciągi wielowierszowe używając tej samej składni co literały szablonu. Tak jak literały szablonów, ta składnia pozwala uniknąć łączenia ciągów znaków i upraszcza definicje ciągów tekstowych.

// 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łączam środowisko wykonawcze V8

Jeśli skrypt korzysta ze środowiska wykonawczego Rhino, możesz przełączyć go na V8 przez wykonując te czynności:

  1. Otwórz projekt Apps Script.
  2. Po lewej stronie kliknij Ustawienia projektu .
  3. Zaznacz pole wyboru Włącz środowisko wykonawcze Chrome 8.

Możesz też określić środowisko wykonawcze skryptu bezpośrednio przez edytowanie pliku manifestu skryptu plik:

  1. Otwórz projekt Apps Script.
  2. Po lewej stronie kliknij Ustawienia projektu .
  3. Zaznacz pole wyboru Pokaż plik „appsscript.json”. plik manifestu w edytorze.
  4. Po lewej stronie kliknij Edytor > appsscript.json
  5. W pliku manifestu appsscript.json ustaw runtimeVersion na wartość V8.
  6. U góry kliknij Zapisz projekt .

Wyjaśnienia dotyczące migracji skryptów do wersji 8 oraz inne działania, które pomogą zapewnić prawidłowe działanie skryptu w wersji 8.

Włączanie środowiska wykonawczego Rhino

Jeśli Twój skrypt korzysta z wersji V8 i musisz przełączyć ją na wersję oryginalną W środowisku wykonawczym Rhino wykonaj te czynności:

  1. Otwórz projekt Apps Script.
  2. Po lewej stronie kliknij Ustawienia projektu .
  3. Odznacz pole wyboru Włącz środowisko wykonawcze Chrome 8.

Możesz też edytować plik manifestu skryptu:

  1. Otwórz projekt Apps Script.
  2. Po lewej stronie kliknij Ustawienia projektu .
  3. Zaznacz pole wyboru Pokaż plik „appsscript.json”. plik manifestu w edytorze.
  4. Po lewej stronie kliknij Edytor > appsscript.json
  5. W pliku manifestu appsscript.json ustaw runtimeVersion na wartość DEPRECATED_ES5.
  6. U góry kliknij Zapisz projekt .

Jak przenieść istniejące skrypty?

Migracja skryptów do wersji 8 z opisem czynności, jakie należy wykonać, aby przenieść istniejący skrypt do należy używać wersji 8. Wymaga to włączenia środowiska wykonawczego V8 i sprawdzenia skryptu pod kątem wszystkich znanych niezgodności.

Automatyczna migracja skryptów do wersji 8

Od 18 lutego 2020 roku Google rozpocznie stopniową migrację istniejących skryptów, które przechodzą nasz zautomatyzowany test zgodności do wersji 8. skrypty, których dotyczy problem; po migracji będą działać normalnie.

Jeśli chcesz wyłączyć automatyczną migrację skryptu, ustaw parametr runtimeVersion w pliku manifestu do DEPRECATED_ES5. Możesz ręcznie przeniesie skrypt do wersji V8 w dowolnym momencie później.

Jak zgłaszać błędy?

Przeczytaj przewodnik pomocy, aby dowiedzieć się, jak zacząć programować. uzyskać pomoc w Stack Overflow, wyszukać istniejące raporty o problemach, zgłaszać nowe błędy przesyłać prośby o dodanie funkcji.