Есть ли в JavaScript какие-либо способы получить свойство объекта без использования точечной нотации или нотации в скобках? - PullRequest
0 голосов
/ 21 сентября 2018

Допустим, у меня есть простой объект a = {b: 2}.Мне известны два способа получения значения свойства b для:

Обозначение точки: a.b // 2

и

Обозначение в скобках: a['b'] // 2

Помимо практичности, существует ли какой-либо способ получить значение b из объекта a, не используя ни один из этих двух методов (точечная нотация и нотация в скобках)? На странице MDN, посвященной методам доступа к собственности перечислены только 2 метода.


Это просто любопытство, которое у меня было.Я знаю, что существуют неясные способы вызова функций без круглых скобок, например,

parseInt`5.1`

Я хотел посмотреть, возможна ли такая же неясная вещь для доступа к свойству.

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

Это не точно то же самое, что доступ к свойству, но, тем не менее, это хитрый способ получить доступ к содержимому объекта, если вы используете последнюю версию JS (es6 +).Все модные дети JS делают это в наши дни.

const { b } = a
console.log(b) // 2

Это называется деструктурирование , оно работает с объектами и массивами, и вы можете прочитать об этом здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

0 голосов
/ 21 сентября 2018

Не забудьте Object.getOwnPropertyDescriptor():

const object1 = {
  property1: 42
}

const descriptor1 = Object.getOwnPropertyDescriptor(object1, 'property1');
console.log(descriptor1.value);//42

Он не выполняет поиск в цепочке прототипов, но работает с непосредственными свойствами и стоит отметить, поскольку вы можете выполнять рекурсивные функции, ища цепочку прототипов.с этим:)

0 голосов
/ 21 сентября 2018

Первое, что приходит на ум, это Object.values

const a = {b: 2}

Object.values(a).forEach(v => {
  console.info(v)
})

Но как вы узнаете, к какому ключу вы обращаетесь?

Также есть Object.entries() Полагаю,

const a = {b: 2}

Object.entries(a).forEach(entry => {
  // entries are [key, value] arrays
  let value = entry.pop()
  let key = entry.pop()
  console.info(key, ':', value)
})

Примечание: я использовал Array.prototype.pop(), чтобы не использовать "скобка" .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...