2016-11-11 3 views
2

Я часто вижу код, где люди определяют населенный массив, используя метод разделения, например:В Javascript зачем определять массив с помощью split?

var colors = "red,green,blue".split(','); 

Как это отличается от:

var colors = ["red","green","blue"]; 

Является ли это просто, чтобы избежать необходимости цитировать каждое значение ?

+10

первый - это просто плохая привычка. –

+1

И потратить больше циклов процессора. –

+0

Я думаю, может быть, кто-то хочет иметь специальный код :). Разделение для создания массива имеет проблемы с производительностью, необходимо выполнить операцию над строкой раньше. –

ответ

3

Разделение строки - плохой способ создания массива. Существует ряд проблем с подходом, который включает в себя производительность, стабильность и потребление памяти. Это требует времени процессора для анализа строки, она подвержена ошибкам (двойные запятые, пробелы в строке и т. Д.) И означает, что ваш скрипт должен хранить в два раза больше данных в памяти.

Это не очень хорошая идея, и, скорее всего, это просто плохая привычка, которую кто-то поднял, когда они впервые узнали о строках и массивах. Это или они пытаются быть умными для своего рода упражнений по кодированию.

Как правило, единственный раз, когда вы должны разбирать строки в массивы, вы читаете эти строковые данные из внешнего источника и должны преобразовывать их в родные типы. Если вы уже знаете значения заранее, вы должны создать массив самостоятельно.

Единственная возможная причина, по которой кто-то может это сделать, - уменьшить количество символов в их исходном коде, эффективность торговли для полосы пропускания. 'a,b,c,d,e,f,g'.split(',') меньше символов, чем ['a','b','c','d','e','f','g'].

+0

Исправьте меня, если я ошибаюсь (и я очень хорошо могу быть), но есть случай использования с outlier. Если вы хотите превратить строку в массив символов «abcdefgh» .split ('') хорошо работает для быстрого получения методов массива. – zfrisch

+0

@zfrisch well you _could_ это сделать, но я не могу придумать, почему у вас будет очень длинная строка, которую вы должны жестко закодировать, а затем разделить. И я говорю о длинной строке, потому что, если она короткая, вы можете просто просто сделать массив - конечно, это _slightly_ раздражает, но если это действительно a-h, я бы просто напечатал его вручную. – vlaz

+0

Я добавил одну возможную причину исключения; более короткий исходный код, если в этом списке было много элементов. – Soviut

1

Нет никакой разницы, это просто плохая практика и лень, если что-либо. Единственная причина, по которой я мог бы подумать об использовании первого подхода, - это то, что данные естественным образом пришли в строковой форме и с использованием литерала массива сделали его полностью нечитаемым.