一、Array类型
js 中 Array 数据类型非常强大,非常灵活
1.对于一个数组,它的每一项都可以是不同的数据类型
2.数组长度并不是一个固定的值,它是可以随时变化的
3.它可以用来模拟数据结构中的 “队列” 和 “栈”,操作起来十分方便
构造:
var arr = new Array();
var arr = [];
var arr = new Array(1,2,3,4);
console.log(arr);// [1, 2, 3, 4]
var arr = [1,2,3,4];
console.log(arr);// [1, 2, 3, 4]
方法和属性:
<1> length, join
length //并非只读属性,可以用它来改变数组的长度
join();// 连接数组中的元素,返回字符串,可带参数,默认为","分隔
var nums = [1,2,3,4];
console.log(nums.join());// 1,2,3,4
console.log(nums.join("/"));// 1/2/3/4
console.log(nums);// [1, 2, 3, 4]
console.log(nums.length);// 4
nums.length = 5;
console.log(nums.length);// 5
nums.push(5);
console.log(nums.length);// 6
console.log(nums);// [1, 2, 3, 4, 5: 5]
<2> toString(), toLocaleString(), valueOf()
var nums = [1,2,3,4];
console.log(nums.toString());// 1,2,3,4
console.log(nums.toLocaleString());// 1,2,3,4
console.log(nums.valueOf());// [1, 2, 3, 4]
<3> push(), pop(), unshift(), shift(), splice()
push(param);//从数组末端压入元素param
pop();//从数组末端移除一个元素
unshift(param);//从数组头部加入元素param
shift();//从数组头部删除一个元素
tip:这几个方法都十分好理解,这里不就再举例了。
值得注意的是unshift()与shift()的功能不要搞混淆了
splice();// 向/从数组中添加/删除项目,然后返回被删除的元素。它会直接对数组进行修改
语法:
arr.splice(index, delmany [, item1, item2……]);
添加元素:
var nums = [1,2,3,4,5,6,7];
var arr = nums.splice(3, 0, 3, 3);
console.log(arr);// []
console.log(nums); // [1, 2, 3, 3, 3, 4, 5, 6, 7]
第一个参数表示要操作的索引,第二个参数表示要删除的个数,
这里[delmany == 0]表示不删除元素,后面的参数表示要加入的元素
console.log(arr)返回[],表示此时不返回任何数据
添加一个数组:
var nums = [1,2,3,4,5,6,7];
var arr = nums.splice(3, 0, [3, 3]);
console.log(arr);// []
console.log(nums); // [1, 2, 3, Array[2], 4, 5, 6, 7]
删除元素:
var nums = [1,2,3,4,5,6,7];
var arr = nums.splice(3, 2);
console.log(arr);// [4, 5]
console.log(nums); // [1, 2, 3, 6, 7]
console.log(arr)返回[4, 5],表示此时返回[4, 5],而这恰好是删除的数据
替换元素:
var nums = [1,2,3,4,5,6,7];
var arr = nums.splice(3, 1, "rgy");
console.log(arr);// [4]
console.log(nums); // [1, 2, 3, "rgy", 5, 6, 7]
console.log(arr)返回[4],表示此时返回删除的数据[4]console.log(nums)返回[1, 2, 3, "rgy", 5, 6, 7],表示index == 3上的元素替换成了"rgy"
<4> sort() 排序
sort();//默认以字符串为标准排序的
var values = [4, 12, 10, 5, 9];
values.sort();// [10, 12, 4, 5, 9]
这显然不是我们想要的,要真正达到排序的目的,需要自己写一个方法,然后用sort辅助以达到目的。
var values = [4, 12, 10, 5, 9];
function compare(value1, value2){
if(value1 < value2){
return -1;
}else if(value1 > value2){
return 1;
}else{
return 0;
}
}
values.sort(compare);//[4, 5, 9, 10, 12]
目的已达到!
<5> concat(), slice()
var nums = [1,2,3,4,5,6,7];
var arr = nums.concat(8,9);
console.log(nums);//[1, 2, 3, 4, 5, 6, 7]
console.log(arr);//[1, 2, 3, 4, 5, 6, 7, 8, 9]
可见concat()方法不会影响原数组,它会返回一个新的数组
var nums = [1,2,3,4,5,6,7];
var arr = nums.slice(-2);
console.log(nums);//[1, 2, 3, 4, 5, 6, 7]
console.log(arr);//[6, 7]
同上,可见slice()方法不会影响原数组,它会返回一个新的数组
二、Object类型
构造:
<1>
var cat = new Object();
cat.name = '喵喵';
<2>
var cat = {};
cat.name = '喵喵';
<3>
var obj = {
name : '喵喵'
}
var cat = new Object(obj);
<4>
function Cat(name){
return {
name:name
}
}
var cat = Cat('喵喵');
<5>
function Cat(name){
this.name = name;
}
var cat = new Cat();
获取属性:
<1> obj.name
<2> obj['name']
tip:
注意二者的区别,<2>中的方式[]中可以是参数,<1>中的方式不可以
属性的遍历:
var obj = {
name : 'rgy',
age : '21',
addr : 'hunan',
list : [1, 2, 3, 4],
map: {
key : "value",
arr : [4, 3, 2, 1]
}
};
obj.valueOf();// 返回指定对象的原始值
for(var key in obj) {
console.log("key: " + key);
console.log("value: " + obj[key]);
}
结果:
for(var key in obj) {
console.log("key: " + key);
console.log("value: " , obj[key]);
}
结果:
tip:
注意二者的区别,主要是console.log()方法处理上的区别
一个用加号,一个用逗号。通过实验,可见使用","打印出的结果更全面,更具体
三、RegExp类型
构造:
<1> 显示构造:
var reg = new RegExp("/^\d{5,8}$/");
var reg = new RegExp("/^\d{5,8}$/", flag);
<2> 隐示构造:
var reg = /^\d{5,8}$/;
var reg = /^\d{5,8}$/flag;
说明:
flag 设置正则表达式的标志信息,是可选项
有三个可选值:
i : 不区分大小写
m : 多行匹配
g : 全局匹配
方法:
<1>
test()方法:
reg.test(str); // 返回true/false
var str = "12abc678abc2hh";
var reg = /abc/;
console.log(reg.test(str)); //true
reg = /rgy/;
console.log(reg.test(str)); //false
<2>exac()方法:
reg.exec(str); // 以数组的形式返回第一个匹配的值
以数组的形式返回第一个匹配的值,嗯,这句话有点绕,看下面的例子吧,一看就明白了
var str = "12abc678abc2hh";
var reg = /abc/;
console.log(reg.exec(str)); // ["abc", index: 2, input: "12abc678abc2hh"]