对象分类
内建对象:在引擎初始化阶段就被创建好了的对象。可以去Javascript参考手册查看。(www.w3school.com.cn)
宿主对象:由ECMAScript实现的宿主环境提供的对象。所有的BOM和DOM对象都是宿主对象。
自定义对象
数组(Array)
是内置对象,和普通对象类似,用来储存一些值。不同的是普通对象是用字符串作为属性名,而数组是使用数字作为索引操作元素。创建对象的三种方式:
var arr = new Array();
var arr1 = new Array(3);//3个元素
var arr2 = new Array(1, 44, 5);//三个元素1,44,5
var arr3 = [1,2,3,5];//字面量创建数组
数组元素可以为任意类型,(包括对象,函数,数组也就是二维数组)
var length = 7; // 数字
var lastName = "Gates"; // 字符串
var cars = ["Porsche", "Volvo", "BMW"]; // 数组
var x = {
firstName:"Bill", lastName:"Gates"}; // 对象
var y = {
fuction(){
alert(1)},fuction(){
alert(2)}} //函数
尽量不要创建非连续数组,如果读取不存在的 索引,他不会报错而是返回undefined.
length属性
如果修改length长度大于数组长度,多出来部分会空出来,如果少于数组长度,多余部分会被移除。
arr2[arr2.length]=2;
arr2[arr2.length]=12;
可以通过length属性不停向数组最后位置添加新的元素。
数组的四大方法
push方法(将变更后的数组长度作为返回值)
var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
document.write(arr + "<br />")
document.write(arr.push("James") + "<br />")
document.write(arr)
George,John,Thomas
4
George,John,Thomas,James
pop()方法(删除并返回数组的最后一个元素)
var nan = [1, 2, 3, 4];
var waf = nan.pop();
console.log(waf);//4
unshift()方法(向数组的开头添加一个或更多元素,并返回新的长度。)
var waf2=nan.unshift(4,7,9);
console.log(waf2);//6
console.log(nan);//4,7,9,1,2,3
shift()方法(删除并返回数组的第一个元素)
console.log(nan.shift());//4
foreach()方法
/**
* foreach方法需要一个函数作为参数
* 像这种函数,由我们创建但是不由我们调用,称为回掉函数
* 数组中几个元素函数执行几次,每次执行,浏览器都会将遍历到的元素
* 以实参的形式传递进来
* 浏览器会在回调函数中传入三个参数
* 第一个参数,当前遍历的元素
* 第二个参数,当前遍历元素的索引就是数组的序号
* 第三个参数,正在遍历的数组(就是arr2数组)
*/
var arr2 = ["赵", "刘", "王", "孙", "增"];
arr2.forEach(function (value, index, array) {
console.log("姓氏"+value);
});
slice(方法从某个已有的数组返回选定的元素)
var arr2 = ["赵", "刘", "王", "孙", "增"];
/**
* arrayObject.slice(start,end)可以从数组提取指定元素,不会改变原数组,将截取元素封装在新数组
* 参数:1.截取开始位置的开始的索引(从0开始,如果为负数,意味着从尾部开始,-1最后一个元素),包括开始元素
* 2.截取结束位置的索引(从0开始,如果为负数,意味着从尾部开始,-1最后一个元素),不包括截止元素。
*/
var result = arr2.slice(0, 2);
console.log(result);//"赵", "刘",
splice()方法(删除元素,并向数组添加新元素)
格式:
arrayObject.splice(index,howmany,element1,.....,elementX)
参数 | 描述 |
---|---|
index | 必需。规定从何处添加/删除元素。 该参数是开始插入和(或)删除的数组元素的下标,必须是数字。 |
howmany | 必需。规定应该删除多少元素。必须是数字,但可以是 “0”。 如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。 |
element1 | 可选。规定要添加到数组的新元素。从 index 所指的下标处开始插入。 |
elementX | 可选。可向数组添加若干元素。 |
/**
* splice()方法 ,将删除元素当做返回值,包括起始位置
* 如果想要添加元素将第二个参数设置为0,从起始位置依次添加元素,原来元素自动右移动
*/
// var result2 = arr2.splice(1,2);
// console.log(result2);//刘,王
var result3 = arr2.splice(1,0,"吴","唐");
console.log(arr2);//赵,吴,唐 ,刘,王,孙,增。
sort方法(对数组的元素进行排序)
/**
*sort方法,默认Unicode编码进行排序,从小到大
* 即使是纯数字也会按照Unicode编码排序,会出现错误,因此需要我们自己定义排序规则
*我们可以在sort()添加一个回调函数,指定排序规则,回调函数有两个形参
* 浏览器会分别使用数组中的元素作为实参调用回调函数
* 是用哪个元素调用不确定,但肯定数组中a在b前边,
* 如果返回一个大于0值,元素位置交换,
* 如果小于0的值,位置不交换,
* 如果值为0,认为相等,也不交换
*/
var arr4 = [2, 4, 1, 9, 11, 3]
arr4.sort();
console.log(arr4);// 1, 11, 2, 3, 4, 9 出现错误
arr4.sort(function (a, b) {
//升序排序
return a-b;
//降序排序
return b-a;
});
console.log(arr4);// [ 1, 2, 3, 4, 9, 11 ]
回调函数
简单的说吧,我先写一个函数然后将方法名给你,或者直接将匿名函数当参数给你。我可能不直接使用你,但是你直接将使用你的方法给我了,当我需要用你时,直接可以触发你的方法,这就叫调用回调函数(在一个函数里参数里定义另外一个函数,或传入方法)
function say (value) {
alert(value);
}
function execute (someFunction, value) {
someFunction(value);
}
execute(say, 'hi js.');
与
扫描二维码关注公众号,回复:
12051399 查看本文章
function execute (someFunction, value) {
someFunction(value);
}
execute(function(value){alert(value);}, 'hi js.');
上面第一段代码是将say方法作为参数传递给execute方法
第二段代码则是直接将匿名函数作为参数传递给execute方法
实际上:
function say (value) {
alert(value);
}
// 注意看下面,直接写say方法的方法名与下面的匿名函数可以认为是一个东西
// 这样再看上面两段代码是不是对函数可以作为参数传递就更加清晰了
say;
function (value) {
alert(value);
}
这里的say或者匿名函数就被称为回调函数!(该部分参考:https://segmentfault.com/a/1190000012026011)
Array 对象方法
方法 | 描述 |
---|---|
concat() | 连接两个或更多的数组,并返回结果。 |
join() | 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。 |
pop() | 删除并返回数组的最后一个元素 |
push() | 向数组的末尾添加一个或更多元素,并返回新的长度。 |
reverse() | 颠倒数组中元素的顺序。 |
shift() | 删除并返回数组的第一个元素 |
slice() | 从某个已有的数组返回选定的元素 |
sort() | 对数组的元素进行排序 |
splice() | 删除元素,并向数组添加新元素。 |
toSource() | 返回该对象的源代码。 |
toString() | 把数组转换为字符串,并返回结果。 |
toLocaleString() | 把数组转换为本地数组,并返回结果。 |
unshift() | 向数组的开头添加一个或更多元素,并返回新的长度。 |
valueOf() | 返回数组对象的原始值 |
数组的遍历
<script type="text/javascript">
function person(name, age) {
this.name = name;
this.age = age;
}
person.prototype.toString = function () {
return "person[name=" + this.name + ",age" + this.age + "]";
}//修改toString函数返回值
var per = new person("选悟空", 23);
var per1 = new person("刘悟空", 3);
var per2 = new person("张悟空", 13);
var per3 = new person("吴悟空", 33);
var per4 = new person("关悟空", 15);
/**
* 定义数组将其全部装进去
*/
var arr = new Array();
arr.push(per, per1, per2, per3, per4)
/**
* 筛选未成年在本数组内
*/
for (var i = 0; i < arr.length; i++) {
if (arr[i].age >= 18) {
for (var j = i; j < arr.length-1; j++) {
//arr.length-1,防止越界
arr[j]=arr[j+1];//删除这个成年的元素
}
arr.length--;//删除一个大于18数的,长度减一
}
}
console.log(arr);//3,13,15
</script>
数组去重
var arr = [1, 5, 3, 2, 4, 2, 2, 7, 1, 3, 4, 7, 7, 9, 7, 7, 3, 8];
/**
* 去除数组中的重复数字
*/
function removesame(arr1) {
for (var i = 0; i < arr1.length; i++) {
for (var j = i + 1; j < arr1.length; j++) {
if (arr1[i] == arr1[j]) {
arr1.splice(j,1);
/**
* splice方法删除数组中一个元素后边元素会往前顶,如果不j--,这个数字会逃过检查
* 从而去重失败
*/
j--;
}
}
}
return arr1;
}
var arr2 =removesame(arr);
console.log(arr2);//1, 5, 3, 2, 4, 7, 9, 8