javascript初学记1----各种玩乐的数组
先介绍javascript,著名的浏览器脚本语言,基于对象的,嗯,没了。直接看数组:
. 数组的创建
  js数组的创建主要有两种方式:
一种是直接用中括号([])来解决:
var fruits = ['Apple', 'Banana'];
这种方法简单高效。想写什么就写什么,非常方便。
还有一种就是通过构造器
var fruit = new Array ('Apple', 'Banana');
至于构造器的这种方法与[]有什么区别呢?我决定还是看看:
听说js的所有对象都有constructor属性来指明构造器于是我决定查查看:
先查数组是否为对象:
var fruit = [];
var fruits = new Array();
console.log(typeof fruit); // object
然后就好办了:
console.log(fruit.constructor); // Array
console.log(fruits.constructor); // Array
于是发现这两者完全没有区别,硬要说区别的话我估计就是new Array()在括号中填上数字可以规定好数组的长度,如var fruits = new Array(4)规定数组只有四个长度,不过可以通过像fruits[10] = 1000来打破这种规定,所以并不是强制,鉴于用[]可以少写一些代码,我还是用[]创建数组比较好。
. 数组的属性
js的数组拥有着迷人的属性,无限加值,拥有典型的数组精神,当我们规定
var num = [1, 2, 3];
console.log(num.length); // 3
这个时候num是长这个样子的,当
num[1000] = 1000;
console.log(num.length); // 1001
瞬间成大数组,并且数组的其他所有撑起来的值均为undefined,数组内部可以存放各种各样的变量,非常丰富。
. 还有什么可以被叫做数组?
javascript中的对象 {},如果只规定{0: 0, 1: 1, 2: 2, 3: 3, length: 3}同样可以起到数组的作用,并且用for in遍历的时候会优先遍历1, 2, 3, 4, 5的数字,十分方便,甚至能被数组的方法操作。 但其中一定要注意: length和 0 是必须需要的,不然一切操作都不能生效,而且不报错。
其中有一个有趣的操作:
var fakeArray = {0: '1', 1: '2', 2: '3', length: 3}
var arr = Array.prototype.slice.call(fakeArray);
console.log(arr01[0]); // 1
console.log(arr01[1]); // 2
如果当我们满脑子骚操作,修改了length属性之后:
var fakeArray = {0: '1', 1: '2', 2: '3', length: 1}
var arr = Array.prototype.slice.call(fakeArray);
console.log(arr01[0]); // 1
console.log(arr01[1]); // undefined
蓦然回首,发现数值已在回忆中,说明数组方法会放弃大于length的索引,同样,当length换成其他类型变量后,所有的数组操作都不能进行,而且不会报错…..(除了数字字符串效果与数字相同);
. 数组的方法
详情数组方法请参考
js数组方法最容易混淆的我感觉就是返回和直接操作数组的方法傻傻分不清,因此把几种典型的方法按照上面两类分个类比较好
首先是返回类:
- indexOf:-- 最标准的js数组方法
var a = ['2', '9', '7'];
console.log(a.indexOf('9')) // 1
- concat: 听说有人问为什么非得用这个,不能数组相加?
--当然是可以相加的啊!
var a = [1,2,3,4,5];
var b = [6,7,8,9,10];
var c = a + b;
console.log(c.length) // 19
没报错,当然没问题啊 !
. slice :
var a = [1,2,3,4,5];
var b = a.slice(0, 3);
console.log(b); // [1,2,3]
至于其他像什么find,includes, 或者遍历操作什么的都是返回,不用多考虑了。
然后是直接修改类:
. splice:
var a = [1,2,3,4];
a.splice(1,1);
console.log(a); // [1,3,4]
. pop:
var a = [1,2,3,4];
var b = a.pop();
console.log(a); // [1,2,3]
console.log(b); // 4
. shift
. unshift
. push
. fill
. 关于删除数组内容 delete & splice
用delete删除的数组内容会变成undefined而动用splice删除的内容是真正意义上的删除,数组的length也会改变。delete比较好的是针对对象而言。当然对于伪数组 {}来说,操作是相同的,delete并不会改变手动设定的length, 但用splice时会让伪数组的length减一。总结一句:数组或者伪数组的数组部分要删除一定得运用splice, 而delete只针对对象里的属性进行删除。有人问js全局变量怎么删除?怕是删不掉了。
. sort方法的注意
对于sort方法,一定需要输入函数function (a, b) {
return a - b}因为很显然sort方法并不是按照数字大小,而是unicode顺序,因此数字大小排序时需要用上面的函数来规定为数字大小排序