Значение ключа Инициализация пары не работает с переменной? - PullRequest
2 голосов
/ 03 мая 2019

Я пытаюсь понять, почему поведение этих двух строк кода ведет себя по-разному. Я также пытаюсь создать поведение в примере один, используя переменные, такие как в примере два, см. Пример ниже:

  var kv = {
    'abc': 'moon',
  };
  Browser.msgBox(kv['abc']);

возвращает луну, как и ожидалось.

  var f = 'abc';
  var r = 'moon';
  var kv2 = {
    f: r,
  };
  Browser.msgBox(kv2[f]);

возвращает неопределенное значение.

Ответы [ 3 ]

3 голосов
/ 03 мая 2019

Во втором примере вы создаете kv2 как object с уникальным property с именем f.

var f = 'abc';
var r = 'moon';
var kv2 = {
  f: r,
};

console.log(kv2);
console.log(kv2.f);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

Новый ECMAScript (ES6) включает в себя функцию с именем вычисляемые имена свойств , которая будет адекватна тому, что вы пытаетесь сделать, т.е. используйте имя свойства, хранящееся в некоторой переменной. Пример:

var f = 'abc';
var r = 'moon';
var kv2 = {
  [f]: r, // Using computed property name!
};

console.log(kv2);
console.log(kv2[f]);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

Однако из wikipedia видно, что эта функция недоступна для вас:

Apps Script - это язык сценариев для разработки легких приложений на платформе G Suite. Он основан на JavaScript 1.6 с некоторыми частями 1.7 и 1.8 и предоставляет подмножество ECMAScript 5 API.

Итак, лучшее, что вы можете сделать, если вы все еще хотите использовать имя свойства, хранящееся в переменной, это:

var f = 'abc';
var r = 'moon';
var kv2 = {};
kv2[f] = r;

console.log(kv2);
console.log(kv2[f]);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
2 голосов
/ 03 мая 2019

Вы можете использовать обозначение объекта:

  Browser.msgBox(kv2.f);

0 голосов
/ 03 мая 2019

Эти два метода работают для меня:

В этой ситуации вы действительно можете увидеть kvr = {f: r}, что редактор показывает, что ключ не получает подстановку.

function sampletest() {
  var f='abc';
  var r='moon';
  var kv2={abc:r};
  Browser.msgBox(kv2[f]);
}

function sampletest1() {
  var f='abc';
  var r='moon';
  var kv2={};
  kv2[f]=r;
  Browser.msgBox(kv2[f]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...