unshift可以在头部添加元素
//上面记录的时候有点没有头脑,下面在记录的时候一定要分清楚先后的顺序,最好每个章节一起学习,并且要及时的复习
undefined
//这一章要学习数组,在JavaScript中的数组首先是一个“弱类型”的数组,就是说你可以在其中定义很多的东西,不一定非要是数字类型
undefined
var arr = [1,null,true,undefined,[1,1,2]];
undefined
//里面也可以定义对象,
undefined
//一、创建数组
undefined
//就像上面直接创建
undefined
var a = [,,];
undefined
//上面的方法不建议,创建了“两个”undefined,数组创建的长度是从0~2的23次方
undefined
//2、还可以用object的方法创建
undefined
var arr = new Array(100,false);//可以在里面直接加
undefined
arr
(2) [100, false]
delete arr[0]
true
//但是删除之后,长度是不变的,只是删除的地方变成了undefined
undefined
//push方法
undefined
var arr[];
VM2648:1 Uncaught SyntaxError: Unexpected token '['
var arr = [];
undefined
arr.[0] = 1
VM2722:1 Uncaught SyntaxError: Unexpected token '['
arr[0]= 1
1
arr.push(1)
2
//unshift方法
undefined
//unshift实在数组的头部添加元素
undefined
arr.unshift(1)
3
arr
(3) [1, 1, 1]
//in
undefined
//in方法可以判断数字是否在数组里面
undefined
1 in arr
true
//pop函数,删除掉尾部的元素,也可以用length-1的方法
undefined
arr.pop()
1
arr
(2) [1, 1]
//shift()函数是在头部删除元素
undefined
arr.shift
ƒ shift() { [native code] }
arr.shift()
1
arr
[1]
6162:1 Unchecked runtime.lastError: The message port closed before a response was received.
//以上可以看出来数组是动态的
undefined
//数组的遍历:
undefined
//第一种方法就是for循环,这里重要的是forin循环,要注意的是数组也作为一个对象,其实里面的每个元素也可以理解为数组的属性,但是同时原型链上的属性也是作为一个数组的属性会被输出出来,这样的话就会产生一些问题
undefined
arr.prototype.x = 1
VM4710:1 Uncaught TypeError: Cannot set property 'x' of undefined
at <anonymous>:1:17
(anonymous) @ VM4710:1
Array.prototype.x = 1
1
Array.prototype.x = 'in'
"in"
for(i in arr){console.log(arr[i])}
VM4960:1 1
VM4960:1 in
undefined
//可以看到原型链上的属性也被输出出来了,而且要注意的是数组作为一个对象它的元素的名字就是相应的索引,而值就是里面的值
undefined
//当然可以用hasownproperty的方式判断
undefined
for(i in arr){if(arr.hasOwnProperty(i){console.log(arr[i]);})}
VM5688:1 Uncaught SyntaxError: Unexpected token '{'
for(i in arr){if(arr.hasOwnProperty(i)){console.log(arr[i]);}}
数组操作:
unshift:数组头部添加元素
shift:数组头部去除元素
push:数组尾部添加元素
pop:数组尾部移除元素
素组元素增删
数组元素增删
字面量??
用for...in时注意会连同数组的原型中的元素一起遍历。利用arr.hasOwnproperty(i)的方法过滤掉原型链上的属性。
arr.unshift(0);在数组头部添加0元素。
delete arr[2]与arr[2]=undefined的区别
arr.length-=1 与arr.pop()相同;删除最后一个元素
arr.shift()头部删除元素
for in 会把原型的输出,且顺序不一定
arr.hasOwnProperty() 判断是否是原型
数组
前面添加 unshift(),
delete arr[X]; 长度不会变短
删除最后的一个:
1、arr.legth -=1 自减1,
2、arr.pop()
删除头部的一个:arr.shift()
数组也是对象,也有原型
数组元素的增删
数组元素读写
创建数组的方式
数组的添加push--->尾部添加,unshift--->头部添加

arr.unshift(val); 在头部添加一个值
arr.shift(); 删除头部元素
数组也是对象,它甚至可以用 arr.prop = val ; 来添加一个属性,在遍历这个数组时也可以遍历出这个prop。
for in 这种遍历方式顺序是不固定的
删除尾部元素:arr.pop();
删除头部元素:arr.shift();
ps:delete arr[n]; 只是把下标为n的元素变为undefined,数组长度是没有变化
arr.push(n)和arr[arr.length]= n;
是在数组的尾部添加元素n
在头部添加数组元素n:arr.unshift(n);
11 in arr ;是查找数组arr的下标为11的元素是否存在
array构造器有new和没有new都是等价的
数组迭代:for(var i=0;i<n;i++)
for(i in arr)//输出无顺序,原型链上的属性也可能会出现
而且如果arr.x=0;这个也会出现,虽然x不是数值索引。

数组的增删:动态的,无需指定大小
push,pop
unshift,shift
var arr =[];
arr[0] = 1;
arr[1] = 2;
arr.push(3);//在数组末尾增加一个元素
arr;//[1,2,3]
arr[arr.length] = 4;//等价于arr.push(4);
arr;//[1,2,3,4]
arr.unshift(0);//在数组开头增加一个元素
arr;//{0,1,2,3,4]
delete 方法见上一个笔记
arr.length-=1;
arr;//[0,1,2,3],4 is removed
arr.pop();//3 returned by pop,在数组尾部删除元素
arr;//[0,1,2],3 removed
arr.shift();//0 returned by shift,在数组头部删除元素
arr;//[1,2],0 is removed
数组元素的读写:var arr = [1,2,3];
arr[1];//2
arr.length;//3
arr[5]=7;
arr.length;//6
delete arr[0];
arr[0];//undefined
arr.length;//6因为delete只是把数组元素改为undefined
0 in arr;//false,delete之后索引在数组中不存在了,但还是会占一个位置
但是:arr[0]=undefined; 0 in arr;//true,与delete是不一样的
数组允许有一个多余的逗号:
所以var commasArr2 = [,,];//理解为两个元素,即undefined,undefined
上面的做法不提倡
数组长度范围:from 0 to 2^23-1
创建数组:字面量
用Array()构造器,new Array()相当于[]
Array()可以接受参数的,参数为一个数值型时,就是指定数组长度,若有多个参数,则这些参数会被解释为数组的元素
例:var arrWithLength=new Array(100);
var arrLikesLiteral = new Array(true,false,null,a,"hi");
等价于[true,false,null,a,"hi"]
注意new可以省略,即可以这样:var arr = Array();
数组: 1、JS中的数组是弱类型的 数组中可以含有不同类型的元素 数组元素甚至可以是对象 或者其他数组; 2.创建 2.1 字面量 var arr = ['ds','aa']; 2.2 new Array构造器 var arr = new Array(); var arr = new Array(10); 则表示该数组有10个空元素(只有一个值的时候表示有多少元素) var arr = new Array('a','b'); 等价于 ['a','b']; new 是可以省略的 3.数组的读写 数组元素增减 用delate可以删除元素,但是数组长度不变,其实delate之后,是设置元素的值为undefined。 arr.push(1); 在数组尾部添加元素 arr.unshift();在数组头部添加元素 delete arr[2]; 是将数组中的下标为2的元素 变成undefined 并非真正的删除 arr.pop() 删除数组的最后一个元素 arr.shift() 删除数组的第一个元素 数组迭代 for循环 for in 遍历(定义在原型上的属性也会遍历出来) 使用hasOwnProperty可以避免将原型上的属性遍历出来 for(i in arr){ if(arr.hasOwnProperty(i)) //不会遍历出原型上的元素 }
数组头部添加元素
arr.unshift(obj);
数组尾部移除元素
arr.pop();
数组头部移除元素
arr.shift();
var arr = [...]
数组 arr 的 操作中,
使用 delete 操作符删除 下标为 index 的元素
或 直接 赋值 下标为 index 的元素 为 undefined后,
再次访问 数组中的 下标为 index 的元素 返回的 值都是undefined;
××× 但是两者不同点在于:
由于数组也是对象,使用 delete 删除 后,使用
index in arr // return false
但是如果对 arr 原型上添加一个 key 为 index 的 可枚举属性,
使用 index in arr // return true
老师课件有错误,数组的最大有限长度是
Math.pow(2, 32) - 1
不是
Math.pow(2, 23) - 1
数组的操作
创建数组:1.字面量的方式
var arr1 = [1,,2];//1,undefined,2
var arr2 = [,,];//undefined*2
数组的长度:最小是0,最长的2^23 - 1
2.new Array 构造器的方式来创建数组
数组元素增删:
arr.length和arr.push的方式添加元素都是在元素的末尾添加元素
arr.unshift方法是在元素的头部添加元素
delete arr[2] 只是把第三个元素变成undefined,数组长度不变
数组迭代,for ; for in
for in 遍历出来的数组无序,而且会遍历原型链,使用hasOwnProperty来过滤
数组的大小:0 - (2^23-1)