使用字符串拆分而不是带子串的数组声明数组

Eug*_*nko 13 javascript arrays string split

我经常注意到人们分裂一串子串而不是只声明一个必要字符串的数组.

moment.js中的示例:

langConfigProperties = 'months|monthsShort|weekdays|weekdaysShort|weekdaysMin|longDateFormat|calendar|relativeTime|ordinal|meridiem'.split('|'),
Run Code Online (Sandbox Code Playgroud)

jQuery中的示例

 "Boolean Number String Function Array Date RegExp Object".split(" ")
Run Code Online (Sandbox Code Playgroud)

有什么理由喜欢这种方式?

Cer*_*rus 15

使用它的速度较慢.split,但它的优点是代码可以更短(更少字符):

var array = 'months|monthsShort|weekdays|weekdaysShort|weekdaysMin|longDateFormat|calendar|relativeTime|ordinal|meridiem'.split('|');
var array = ['months','monthsShort','weekdays','weekdaysShort','weekdaysMin','longDateFormat','calendar','relativeTime','ordinal','meridiem'];
Run Code Online (Sandbox Code Playgroud)

在这个例子中,差异并不大,但如果你有100个变量,差异会变得更大.

由分隔符在分割版本添加的长度是11 + 1 * n,在这里n是元件的数量,11是用于.split('|')
对于阵列的版本,这是2 + 3 * (n - 1),在2[].

这意味着只要你有6个元素,.split版本就会缩短:

for(var i = 5; i < 8; i++){
    console.log('Elements:', i, 'split:', 11 + (i-1), 'array:', 2 + 3 * (i-1));
}
// Elements: 5 split: 15 array: 14
// Elements: 6 split: 16 array: 17
// Elements: 7 split: 17 array: 20
Run Code Online (Sandbox Code Playgroud)