Почему JSON.parse преобразует массив в объект?
Столкнулся с особенностью парсинга (либо по незнанию не понимаю от чего так происходит) массива с одной строкой.
Есть у нас массив с json строкой.
const arr = ['{"name": "John"}']; // массив
const parsedArr = JSON.parse(arr);
console.log(parsedArr); // объект
Почему массив преобразовался в объект?
Ещё примеров:
const example1 = ['"item"'];
console.log(JSON.parse(example1)); // 'item'
const example2 = ['["item"]'];
console.log(JSON.parse(example2)); // ['item']
Кажется, внутри метода parse идёт проверка на то, является ли переданный аргумент массивом. И если да, то если в массиве всего один элемент, то массив раскрывается и возвращается именно элемент массива.
Ответы (1 шт):
Тут ошибка в неявном преобразовании типов.
JSON.parse ожидает на вход строку. Соответственно входящий аргумент преобразуется в строку, ['{"name": "John"}'].toString() === {"name": "John"}.
В свою очередь это валидный JSON, который успешно парсится в объект.
То есть
const arr = ['{"name": "John"}']; // массив
const parsedArr = JSON.parse(arr);
console.log(parsedArr); // объект
То же самое что и
const arr = ['{"name": "John"}']; // массив
const arrString = ['{"name": "John"}'].toString();
console.log(arrString, typeof arrString); // строка
const parsedArr = JSON.parse(arrString);
console.log(parsedArr, typeof parsedArr); // объект