Сценарий Google Apps выдает ошибку при попытке вызвать Object.assign()

Сценарий Google Apps не распознает функцию Object.assign(). При попытке использовать его я получаю сообщение об ошибке:

TypeError: Cannot find function assign in object function Object() { [native code for Object.Object, arity=1] }

Код, с которым я тестирую функцию, — это пример, скопированный непосредственно из MDN:

function myFunction() {
  const object1 = {
    a: 1,
    b: 2,
    c: 3
  };

  const object2 = Object.assign({c: 4, d: 5}, object1); //error is thrown here

  console.log(object2.c, object2.d);
  // expected output: 3 5
}

Я скопировал приведенный выше код непосредственно в консоль разработчика Chrome, которая работала нормально и давала ожидаемый результат.

Я не могу найти в Интернете ничего, говорящего о том, что эта конкретная функция не поддерживается скриптом приложений или чем-то в этом роде. Итак, что происходит? Как я могу это исправить?


person Joel Rummel    schedule 16.08.2018    source источник
comment
Связанный: stackoverflow.com/questions/12279357/ , stackoverflow.com/questions/37768501/ и stackoverflow.com/questions/17252409/   -  person tehhowch    schedule 16.08.2018


Ответы (1)


Apps Script НЕ (на момент написания этой статьи) является полной реализацией стандарта Ecmascript и в настоящее время изначально не поддерживает Object.assign(). Однако вы можете использовать полифиллы (когда это целесообразно), которые могут добавить необходимую функциональность.

Полифилл доступен для Object.assign() на MDN по следующей ссылке:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill

Примечание. Ходят слухи, что Apps Script будет обновлен (в какой-то момент в ближайшем будущем), чтобы использовать движок Chrome V8, тем самым поддерживая EcmaScript 2017.

person TheAddonDepot    schedule 16.08.2018
comment
Теперь поддерживается developers.google.com/apps-script/guides/v8- время выполнения - person realfire; 23.07.2020
comment
Для меня это все еще не работает. Вместо этого я использовал for (let [key, val] of Object.entries(obj2)) obj1[key] = val;. - person Thomas Kühn; 16.10.2020