#javascript #arrays #google-chrome #join
#javascript #массивы #google-chrome #Присоединиться
Вопрос:
Возня с некоторым JavaScript и то, что, как я думал, должно было привести к ошибке, сработало так, как задумывалось. [].join()
кажется, сглаживает вложенный массив любой глубины.
var arr = [['a'], ['b'], ['c']];
arr.join('-'); // => 'a-b-c'
И даже var arr = [['a'], [[[[[[[[['b']]]]]]]]], ['c']];
возвращает точно такой же результат, как указано выше.
Что особенно странно, поскольку оно возвращает ожидаемое (ошибочное) поведение с объектами:
var arr = [{}, {}, {}];
arr.join('-'); // => '[object Object]-[object Object]-[object Object]'
Любопытно, является ли это особенностью последней версии Chrome (53.0.2785.116), намеренной или ошибкой?
Комментарии:
Ответ №1:
Это результат поведения по умолчанию toString
['a']
при 'a'
приведении . Из этого следует, что это [['a']].toString()
также приводит к 'a'
. Игра с этим в консоли должна прояснить это. Вы бы увидели разницу, если бы ваши массивы имели несколько элементов, потому ['a', 'b'].toString()
что это привело бы к 'a,b'
.
Ответ №2:
Для каждого элемента в объединяемом массиве первое, что происходит, — это принудительное преобразование элемента в строку. Что-то вроде
[[[[["b"]]]]]
при приведении к строке будет просто
"b"
Поэтому, когда вы выполняете объединение, составляющие элементы будут вынуждены быть строками, прежде чем процесс объединения выполнит свою задачу по склеиванию элементов вместе.