Тернарное выражение с объектом javascript - PullRequest
1 голос
/ 01 ноября 2019

Допустим, у меня есть следующий объект javascript:

var __error__ = {0: 'ok'}

Я хочу вернуть пустую строку, если ключ отсутствует в объекте, и сообщение об ошибке в противном случае. Например:

var value = __error__[col_num] ? "The value cannot be converted" : ""

Как это можно сделать с помощью троичного выражения правильно? Нужно ли делать __error__[col_num] == undefined? Или вышеприведенное выражение оценивается как false само по себе?

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Вы также можете использовать hasOwnProperty , который возвращает логическое значение, указывающее, имеет ли объект указанное свойство

var __error__ = {
  0: 'ok'
}

var value = __error__.hasOwnProperty(1) ? "The value cannot be converted" : "Empty";
console.log(value)
1 голос
/ 01 ноября 2019

Если вы хотите только проверить, существует ли ключ в объекте, а не то, что значение имеет значение false, вам следует использовать оператор in

var value = col_num in __error__ ? "The value cannot be converted" : ""

Вы также можете использовать Object.hasOwnProperty, который возвращает true, только если объект имеет это свойство (вернет false, если свойство было унаследовано).

Вот несколько примеров, иллюстрирующихразличия

var parent = {
  foo: undefined
};

var child = Object.create(parent);

console.log("foo" in parent); // parent has the "foo" property
console.log("foo" in child); // child has the "foo" property

console.log(parent.hasOwnProperty("foo")); // parent has the "foo" property
console.log(child.hasOwnProperty("foo")); // child has the "foo" property but it belonds to parent

console.log(child.foo !== undefined); // the foo property of child is undefined
console.log(!!child.foo); // the troothy of undefined is false

console.log(parent.foo !== undefined); // the foo property of parent is undefined
console.log(!!parent.foo); // the troothy of undefined is false
...