О javascript присвоении свойств объекта - PullRequest
2 голосов
/ 13 февраля 2020

Назначение свойства объекта const person = { address }, эквивалентное const x = { address: address }, и я хорошо знаю, что невозможно присвоить свойство, подобное этому const person = { adress.street }, но я хочу знать, почему за " ты не можешь ". Почему javascript не const person = { 'adress.street': address.street }. Что javascript делает за кадром?

Ответы [ 2 ]

4 голосов
/ 13 февраля 2020

Это то, как это определено в спецификации EcmaScript . Этот синтаксис "свойства сокращения" был введен в ES2015.

Литерал объекта состоит из PropertyDefinitionList, который сам по себе определяется в терминах PropertyDefinition s.

Определение свойства определяется как:

  • Идентификатор (это так называемый «сокращенный синтаксис», о котором вы спрашиваете)
  • Имя свойства : Выражение присваивания
  • другие вещи, которые не имеют отношения к вопросу

В вашем вопросе adress.stree не является идентификатором; это выражение, состоящее из двух идентификаторов, объединенных оператором доступа члена. Таким образом, оно не соответствует спецификации и не может быть использовано в сокращенном синтаксисе.

A TC39 предложение существует для дальнейшего расширения синтаксиса, предоставляя вам то, что вы ищете.

1 голос
/ 13 февраля 2020

Вы можете сделать с функцией.

function setObjectProperty(object, property, value) {
  var props = property.split(".");
  var obj = object;
  for (let i = 0; i < props.length - 1; i++) {
    const prop = props[i];
    if (prop in obj && typeof obj[prop] == "object") {
      obj = obj[prop];
    } else {
      obj = obj[props[i]] = {};
    }
  }
  obj[props[props.length - 1]] = value;
}

//# Usage

const person = {};
setObjectProperty(person,"address.street","Fatih Sultan Mehmet Cad.");
setObjectProperty(person,"address.city","Konya");
setObjectProperty(person,"country.name","Türkiye");
setObjectProperty(person,"country.short","TR");
console.log(person);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...