数组
JS中的数组是弱类型的,数组中可以含有不同的类型元素
- 字面量数组创建
var BAT = ['B','A','T'];
数组允许最后一个值后留一个逗号 - new Array 创建数组
var arrLength = new Array(100); //undefined * 100
var BAT= new Array('B','A','T');
数组的读写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17var arr = [1,2,3,4,5];
arr[1]; //2
arr.lengthl; //5
arr[5] = 6;
arr.length; //6
delete arr[0];
arr[0]; //undefined
arr.length; //6
1 in arr; //false delete删除的没有这个key
arr[arr.length] = 7; // equal to arr.push(7);在尾巴添加
arr.unshift(0); //在头添加
arr.pop(); //equal to arr.length -= 1; 在尾部删除元素
arr.shift(); //在头部删除一个元素
数组是动态的不用指定大小
二维数组 & 稀疏数组
1 | var arr = [[0,1],[2,3],[4,5]]; |
稀疏数组并不含有从0开始的连续索引,一般length属性值比实际元素个数大。
1 | var arr1 = [undefined]; |
数组方法
1 | {} => Object.prototype |
1 | Array.prototype.join |
join 数组转字符串
1 | var arr = [1,2,3]; |
reverse 数组逆序
1 | var arr = [1,2,3; |
sort 排序(默认是按字母排序)
1 | var arr = ["a","d","b","c"]; |
concat 数组合并
1 | var arr = [1,2,3]; |
slice 返回部分数组
1 | var arr = [1,2,3,4,5]; |
splice 数组拼接
1 | var arr = [1,2,3,4]; |
forEach 数组遍历
1 | var arr = [1,2,3]; |
map 数组映射
1 | var arr = [1,2,3]; |
filter 数组过滤
1 | var arr = [1,2,3,4]; |
every & some 数组判断
1 | var arr = [1,2,3,4]; |
reduce & reduceRight 数组聚合成结果
数组两两之间做一个操作
1 | var arr = [1,2,3]; |
reduceRight 是从数组的尾巴开始遍历
indexOf & lastIndexOf 数组检索
1 | var arr= [1,2,3,2,1]; |
lastIndexOf 是从数组的尾巴开始查找
Array.isArray 判断是否为数组
1 | Array.isArray([]); // true |
数组小结
数组 VS 一般对象
- 相同
都可以继承
数组是对象,对象不一定是数组
都可以当做对象添加删除属性 - 不同
数组自动更新length
按索引访问数组常常比访问一般对象属性明显迅速
数组对象继承Array.prototype上的大量数组操作方法
字符串和数组
- 字符串是类数组
1
2
3
4
5
6var str = "hello";
str.charAt(0); //"h"
str[1]; //e
Array.prototype.join.call(str,"_");
//"h_e_l_l_o" call将对象装化为数组
函数和作用域
函数概述
函数是一块JavaScript代码,被定义一次,但可执行和调用多次。
JS中的函数也是对象,所以JS函数可以像其它对象那样操作和传递
所以我们也常叫JS中的函数为函数对象。
一般函数调用若是没有return 语句这会返回undefined
若是作为构造器外部使用new调用,若是没有return 或者是return 基本类型则会返回this
声明与表达式
创建函数有不同的方式,常见的两种就是函数声明
function add(){}
函数表达式
1 | var add = function(){}; |
区别
- 函数声明会被前置,函数表达式只会变量声明提前
命名函数表达式
1 | var func = function nfe(){}; |
Function构造器
1 | // 没有函数字 只能匿名 不会前置 |
this
全局的this(浏览器)
1 | this.document === docuemnt //true |
一般函数this
1 | function f1(){ |
作为对象方法的函数this 是最常见的用法
1 | var o = {prop :37}; |
函数属性&arguments
1 | function foo(x,y,z){ |
bind与currying 改变this的指向 函数柯里化
1 | this.x = 10; |