前言
JavaScript总结笔记篇仅是记载本人学习过程中的一些总结,为了梳理一下知识点,督促自己不断加强学习。文中有些是源自官网,有些是搜集资料,有些是个人观点,难免存在某些知识点疏漏或者是有错误的地方,如果错误之处,希望看到的小伙伴能及时提个醒,避免误导其他小伙伴,也希望我的总结能帮助到正在学或者是将要学习JavaScript的小伙伴们!大家一起努力,早日成为IT界的大神!
一、数组
(一)创建方法
1.var arr = [1,2,3,4,5];
2.var arr = new Array(); //系统自带的
数组的所有方法全来源于Array.prototype
Ps:var arr = new Array(10); //长度为10的空数组 undefined× 10
var arr1 = [10]; //数组的值为10
// 一旦经历了var的操作,所得出的属性,window的属性,
// 这种属性叫做不可配置的属性。不可配置的属性delete不掉
var num = 123;
window.num; //123
delete num; //false
var num = {
name : "xu"
}
num.name; //"xu"
delete name; //true
// 数组去重
// 数组的每一个位当做对象的属性名(利用对象的属性名都是唯一的)
var arr = [1, 2, 2, 3, 3, 3, 2, 0, 0];
Array.prototype.unique = function () {
var temp = {},
arr = [],
len = this.length;
for (var i = 0; i < len; i++) {
if (!temp[this[i]]) {
temp[this[i]] = "abc";
arr.push(this[i]);
}
}
return arr;
}
(二)方法
改变原数组:push、unshift、pop、shift、reverse、splice、sort
不改变原数组:concat、join、split、toString、slice
(三)改变原数组
1.push
//在原型链上写一个push方法
var arr = [];
Array.prototype.push = function () {
for(var i = 0; i < arguments.length; i ++){
this[this.length] = arguments[i];
}
return this.length;
}
2.unshift 在最前面插入
3.pop 最后一位剪切出来
4.shift 在最前面减
5.reverse
6.splice (从第几位开始,截取多少的长度,在接口处添加新的数据)
var arr = [1,2,3,5];
arr.splice(3,0,4); //结果返回[1,2,3,4,5]
arr.splice(-1, 0);
// -1表示倒数第一位,-1 + 4 = 3,数组有4位,索引为3表示倒数第一位
7.sort 排序方法
// 1.必须写两参数
// 2.看返回值 1)当返回值为负数时,那么前面的数放在前面
// 2) 为正数,那么后面的数在前
// 3)为0,不动
var arr = [23,34,56,12,2,4,78];
arr.sort(
function (a, b) {
// return a - b; 升序
// return b - a; 降序
}
)
//给一个有序的数组,乱序
var arr = [1,2,3,4,5,6,7];
arr.sort(
function () {
return Math.random() - 0.5;
}
)
// 用sort给数组根据ASCII码排序
function retBytes (str) {
var num = str.length;
for (var i = 0; i < num; i++) {
if (str.charCodeAt(i) > 255) {
num ++;
}
}
return num;
}
var arr = ["afad哈哈哈", "安居房拉风aaaaa", "嘿嘿", "hjhfajhf", "afaaaaaaaaa"];
arr.sort(function (a, b) {
return retBytes(a) - retBytes(b);
})
(四)改变原数组
1.concat 拼接功能
a.concat(b); //将b拼接到a上
2.toString();
var a = ['a','b'];
a.toString(); //a : 'a,b'
3.join();
var a = ['a','b','c','d'];
a.join("-"); //'a-b-c-d'
var arr = 【1,2,3,4】;
var newArr = arr.slice(1,3);//[2,3]
slice(从该位开始截取,截取到该位(不包含该位))
var arr = 【1,2,3,4】;
var newArr = arr.slice(1);//[2,3,4]
slice(从第几位开始截取,截取到最后)
var arr = 【1,2,3,4】;
var newArr = arr.slice();//[1,2,3,4]
slice(全部截取)
Ps:string当中有一个方法split(),与数组中的join()方法互逆
var str = [1,2,3,4,5,6];
str.join("-"); //'1-2-3-4-5-6'
str.join(); // '1,2,3,4,5,6'
var str = "hi nice too me you";
str.split("-"); // ["hi nice too me you"]
str.split(" ", 3); // ["hi", "nice", "too"]
简单问题:如何把多个数组拼接在一起
var str = ?;
var str1 = ?;
var str2 = ?;
var str3 = ?;
//散列
var arr = [str,str1,str2,str3];
arr.join("");
二、类数组
1.可以利用属性名模拟数组的特征
2.可以动态的增长length属性
3.如果强行让类数组调用push方法,则会根据length属性值的位置进行属性的扩充。
/类数组
var obj = {
"0" : 'a',
"1" : 'b',
"2" : 'c',
"length" : 3, //类数组必须加length
"push" : Array.prototype.push,
"splice" : Array.prototype.splice
//splice将值转化为数组 ["a","b","c"]
}
//索引要为索引(数字)属性,必须有length属性,最好加上push
var obj = {
"2" : "a",
"3" : "b",
"length" : 2,
"push" : Array.prototype.push
}
obj.push('c');
obj.push('d');
// obj = ?
// var obj = {
// "2" : "c",
// "3" : "d",
// "length" : 4,
// "push" : Array.prototype.push
// }
// push内部原理
// Array.prototype.push = function (target) {
// obj[obj.length] = target;
// obj.length ++;
// }