简单的介绍

//创建
var arr = new Array(element0, element1, ..., elementN); //别用
var arr = Array(element0, element1, ..., elementN); //也别用
var arr = [element0, element1, ..., elementN];

// 译者注: var arr=[4] 和 var arr=new Array(4)是不等效的,
// 后者4指数组长度,所以使用字面值(literal)的方式应该不仅仅是便捷,同时也不易踩坑

arr.length; //这个是数组的长度, 实际上只是整数索引的长度, 对于其他索引是失效的.


//遍历

let arr = [3, 5, 7];
arr.foo = "hello";

//第一种for循环
var colors = ['red', 'green', 'blue'];
for (var i = 0; i < colors.length; i++) {
  console.log(colors[i]);
}

//第二种 for in 这里是key, 需要arr[i]拿值
for (let i in arr) { //会列出非整数索引.
   console.log(i); // logs "0", "1", "2", "foo"
}

//第三种 for of 这里直接是值, 但是会有不全
for (let i of arr) {
   console.log(i); // logs "3", "5", "7" // 注意这里没有 hello
}

//第四种 foreach 小括号套着大括号很烦的. 这个地方最好是传入一个函数变量. 函数作为常量声明更为合理.
var colors = ['red', 'green', 'blue'];
colors.forEach(function(color) {
  console.log(color);
});

//奶奶的, 我明白了, js就是perl啊.

精华

//创建
var arr = ['red', 'green', 'blue'];

//遍历 for in
for (let i in arr) { //会列出非整数索引.
   console.log(i); // logs "0", "1", "2", "foo"
}
//遍历自己
arr.forEach(function(color) {
  console.log(color);
});
//胖箭头, 很神奇, 下面的大括号不可以省略在safari的console里面.
arr.forEach((color)=>{console.log(color);});

数组的函数

这个地方解惑了, 他有很多函数是有回调的(最后一个参数是回调函数), 也就很多函数的默认最后一个参数是调用者自身(这个时候, 回调函数就是倒数第二个了), 这个真的令人发指.

//这四个函数让数组可以作为堆栈使用.
push();
pop();
shift();
unshift();
//排序
var sortFn = function(a, b){
  if (a[a.length - 1] < b[b.length - 1]) return -1;
  if (a[a.length - 1] > b[b.length - 1]) return 1;
  if (a[a.length - 1] == b[b.length - 1]) return 0;
}
myArray.sort(sortFn); 
//下面都是又有回调, 又默认传入自己的.
forEach();
map();
filter();

没啥用的属性

  1. 数组可以嵌套.
  2. 数组还有类对象这个说法, 有一些没啥用的函数和属性, 或许你们会看到所谓的’大神’使用这个.

数组推导式comprehensions 这个已经被废弃, 是不被推荐的特性, 中文文档落后了.

//主要是替换掉map和filter这样的回调+自身引用的函数.
var numbers = [1, 2, 3, 21, 22, 30];
var doubledEvens = [i * 2 for (i of numbers) if (i % 2 === 0)];
console.log(doubledEvens); // logs 4,44,60

把数组输出为字符串

  • xxx.toString()就可以了, 表现完美
  • JSON.stringify(fname) 这个是展示为对象

把字符串当做数组遍历

Array.forEach("a string", function(chr) {
  console.log(chr);
});

操作缓冲区的数组: typed array

神奇了, 为了操作缓冲区, JavaScript专门定义了数据结构.

尾声: 没有看到key:velue的map形式, 看来, 还要继续学习.

字符串也可以当做数组处理

var mystring = "Hello, World!";
var x = mystring.length; //字符串的长度.

//拼接方式1, 有点费劲.
var a = 5;
var b = 10;
console.log("Fifteen is " + (a + b) + " and\nnot " + (2 * a + b) + ".");
// "Fifteen is 15 and
// not 20."


//拼接方式2, 和其他脚本语言接近了. 但是自动高亮代码之后这个反引号很丑陋.
var a = 5;
var b = 10;
console.log(`Fifteen is ${a + b} and\nnot ${2 * a + b}.`);
// "Fifteen is 15 and
// not 20."

特别有用的函数

//数组函数
push() 在数组末尾添加一个或多个元素,并返回数组操作后的长度。
pop() 从数组移出最后一个元素,并返回该元素。
shift() 从数组移出第一个元素,并返回该元素。
//字符串
split	通过将字符串分离成一个个子串来把一个String对象分裂到一个字符串数组中。
trim	去掉字符串开头和结尾的空白字符。
match, replace, search	通过正则表达式来工作.
dorder.splice(x, 0, d) //再x位置插入d, 0代表不删除内容.

字符串截取

str.substring(indexStart[, indexEnd])
str.substr(start[, length]) 这个好, 这个短