今天我们来说说JS的复杂数据类型。数组 、对象称为复杂类型,也称为引用类型。比如数组 函数 正则 时间函数 都属于对象类型,当然也属于复杂数据类型。
如何查看一个变量是何种数据类型呢?使用关键字 typeof 或者 instanceof .
在 JavaScript 中,判断一个变量的类型尝尝会用 typeof 运算符,在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 “object”。这就需要用到instanceof来检测某个对象是不是另一个对象的实例。
typeof instanceof.png数组
创建数组的方式有两种方式 : 构造函数和字面量
构造函数
1.无参构造函数,创建一空数组
var a1 = new Array();
2.一个数字参数构造函数,指定数组长度(由于数组长度可以动态调整,作用并不大),创建指定长度的数组
var a2 = new Array(5);
3.带有初始化数据的构造函数,创建数组并初始化参数数据
var a3 = new Array(4, 'hello', new Date());
字面量
1.使用方括号,创建空数组,等同于调用无参构造函数
var a4 = [];
2.使用中括号,并传入初始化数据,等同于调用带有初始化数据的构造函数
var a5 = [10];
注意点
1.在使用构造函数创建数组时如果传入一个数字参数,则会创建一个长度为参数的数组,如果传入多个,则创建一个数组,参数作为初始化数据加到数组中
var a1 = new Array(5); console.log(a1.length);//5 console.log(a1); //[] ,数组是空的 var a2 = new Array(5,6); console.log(a2.length);//2 console.log(a2); //[5,6]
但是使用字面量方式,无论传入几个参数,都会把参数当作初始化内容
var a1 = [5];console.log(a1.length);//1console.log(a1); //[5]var a2 = [5,6];console.log(a2.length);//2console.log(a2); //[5,6]
2.使用带初始化参数的方式创建数组的时候,最好最后不要带多余的”,”,在不同的浏览器下对此处理方式不一样
var a1 = [1,2,3,];console.log(a1.length);console.log(a1);
这段脚本在现代浏览器上运行结果和我们设想一样,长度是3,但是在低版本IE下确实长度为4的数组,最后一条数据是undefined
有var关键字声明的变量和没有var关键字声明的变量有何区别?
var.png如果不加var 关键字 , 其结果相当于window 对象的一个属性
window.b = 1。
栈方法和堆方法
push 向数组添加一个成员,放置数组的末尾,其它成员顺次移动。返回该数组的长度。
push.pngpop 将数组的最后一个成员 删除,其它成员顺次移动。返回删除该数组成员。
pop.pngunshift 向数组添加一个成员放置数组的第一位,其它成员顺次移动。返回该数组的长度。
shift 将数组的第一个成员 删除,其它成员顺次移动。返回删除的原数组成员。
shift.png其它数组方法
split 将一个字符串转化为一个字符串数组。返回一个新的字符串数组,原字符串无变化。
Join(separator) 将数组中的成员放入一个字符串中,并返回该字符串。
splice 任意位置添加/删除数组中的成员,其它成员并顺次移动。对原数组进行操作。
splice.png1 如果有两个参数,第一个参数表示起始的下标,第二个参数表示删除的个数。
arr.splice(0,1)
从数组的下标为0的开始,删除1个长度的成员。返回删除的数组成员。
2 如果有N个参数,第一个参数表示起始的下标,第二个设置为0(表示没有删除),上下的表示要添加的数组成员。
arr.splice(0,0,1)
从数组的下标为0的开始,添加1个长度的成员。返回数组的长度。
slice 将原数组中一部分浅复制存入一个新的数组对象中,并返回这个新的数组 ,对原始数组没有改变。
Slice.pngconcact 将两个数组拼接到一起.返回一个新的数组。
concat.pngreverse 将数组中元素倒叙排列
sort 先要转换为字符串 用ASCII码 进行比较
网友评论