#javascript
#javascript
Вопрос:
Я хочу создать объект с уникальным ключом, например:
let id = Symbol("id");
let id2 = Symbol("id");
const obj = {
[id]: ()=> 'test'
}
console.log(obj[id]())
В приведенном выше случае я могу получить доступ к возвращаемому значению, только если у меня есть Symbol
. И это работает.
Вопрос: Как создать условие, чтобы избежать ошибки id is not defined
, если я сделаю это:
//let id = Symbol("id");
//let id2 = Symbol("id");
const obj = {
[id]: ()=> 'test'
}
console.log(obj[id]())
Поэтому в этом случае я не хочу получать ошибку, а просто получить пустой объект или что-то в этом роде. Как с этим справиться?
Комментарии:
1. Почему бы просто не сделать что-то вроде
if (typeof id !== "undefined)"
? И вообще, зачем вам пытаться использовать переменную, которая может быть или не быть объявлена?
Ответ №1:
вы можете проверить наличие свойства в этом объекте перед его вызовом, обратитесь к hasOwnProperty
let id = Symbol("id");
let id2 = Symbol("id");
const obj = {
[id]: ()=> 'test'
}
if (obj.hasOwnProperty(id2)) { // false
console.log(obj[id2]());
}
if (obj.hasOwnProperty(id)) { // true
console.log(obj[id]());
}
id2 не будет напечатан, потому что это свойство не существует в объекте, но id существует
Комментарии:
1. Предполагая, что в OP даже не объявлена переменная
id
(я до сих пор не знаю, почему)hasOwnProperty
, это не помогает, поскольку он по-прежнему считывает отсутствующую переменную и выдает исключение.
Ответ №2:
Вы можете использовать блок try-catch.
try {
const obj = {
[id]: ()=> 'test'
}
} catch(err) { console.log('test error catched. Do what you want to do here.'); }
Ответ №3:
Нет смысла проверять наличие необъявленных ошибок переменных или около того, это просто дерьмово.
Если ваша цель — просто создать объект с помощью какого-либо метода, создайте его просто как:
const test = () => 'test';
const obj1 = { somethingYouWant: test };
const obj2 = { id: test };
const obj3 = { otherThing: test };