关于数组的一些新知识点
今天喵爷大人给我看了一个叫js规范的东西 实话说吧 看了这个教规范的 我才知道,之前我写的一些东西都是野路子,都是没有规范的~~受益良多啊~~
下面开始正文了
首先 数组的复制
之前的做数组复制的时候,我都是用一个for循环,把要复制的数组复制一遍的。
var len = items.length;
var itemsCopy = [];
var i;
比如下面的
// bad
for (i = 0; i < len; i++) {
itemsCopy[i] = items[i];
}
但是今天学到了一个新的方法 直接应用slice函数,就可以复制了
// good
itemsCopy = items.slice();
然后 我在进行动态加载的时候,一般都是利用字符串来加载的,比如
function inbox(messages) {
items = '<ul>';
for (i = 0; i < length; i++) {
items += '<li>' + messages[i].message + '</li>';
}
return items + '</ul>';
}
这样不好,因为字符串太长的话,会影响性能的
这里推荐了一个写法
function inbox(messages) {
items = [];
for (i = 0; i < length; i++) {
// use direct assignment in this case because we're micro-optimizing.
items[i] = '<li>' + messages[i].message + '</li>';
}
return '<ul>' + items.join('') + '</ul>';
}
其中的join方法就是讲数组items里面的元素全部拼接起来,形成一个字符串
并且 在join后面的小括号里面,可以加上用什么东西来分隔每一个元素,
最后 看到一个叫类数组对象的东西
我查了一下,发现这个类数组对象其实是一个很鸡助的东西,
这里先说一下 当我们创建一个函数的时候,不仅,那个函数默认创建了一个prototype
还创建了一个arguments,这个对象是比较特别的一个对象,实际上是当前函数的一个内置属性。arguments非常类似Array,但实际上又不是一个Array实例。这个arguments就是一个类数组对象
就好比
如果要将类数组转成数组的话
function trigger() {
var args = Array.prototype.slice.call(arguments);
...
}