«Нотация в скобках» не является нотацией в скобках . Вы определили литерал массива для массива с одним элементом:
let group = false;
let internalId = "someString";
let appliedTo = "someOtherString";
let keyToGroupBy = true === group ? internalId : appliedTo;
console.log(Array.isArray([keyToGroupBy]))
Итак, это «работает», потому что свойства объектов - это либо строки, либо символы. Поскольку вы не предоставляете символ, он будет превращен в строку. И когда вы делаете это с массивом, результатом является ... строка, равная первому элементу:
let group = false;
let internalId = "someString";
let appliedTo = "someOtherString";
let keyToGroupBy = true === group ? internalId : appliedTo;
let arr = [keyToGroupBy];
console.log(String(arr) === arr[0]);
console.log(String(arr));
Превращение массива в строку включает внутренний вызов Array#join()
и, поскольку других значений нет, разделитель не будет будет произведено, и ничто не будет добавлено к единственной строке, которая находится в массиве.
Итак, вы делаете довольно окольный способ ... просто проверять строку.
Считается ли это хаком (работает случайно)
Это в основном хак. Это не совсем нарушение правил преобразования типов, но, конечно, их обход.
или это что-то обычно используемое?
Нет, это не так. Нет смысла оборачивать строки в массивы ... и затем снова конвертировать их в строку, если все, что вам нужно, это строка в первую очередь.
есть лучший способ сделать то же самое ?
Да, просто нет нигде массива литерала: grouped.hasOwnProperty(keyToGroupBy)