欧克,今天早上摆烂,然后再醒来的时候:
????????他在讲什么?????????
好吧,我感觉我思路没问题,就是没记住,那么首先从数组开始记录:
__proto__ 这个属性是什么?
__proto__ 它是每个对象都有的属性,叫做隐式原型(实例对象的隐式原型):
typeof xxxx object 只要出现在obj.__proto__上的属性和方法,那么这些属性和方法就可以被obj使用
学习API的技巧:
1. 看"."前面的数据,看方法的调用者
2. 看小括号()内的数据,看方法的参数
3. 看res数据,看方法的返回值
4. 有什么作用? 看方法的功能
1.concat() 合并数组
var res = arr.concat(参数1,参数2,参数3)
调用者: arr
参数:数组
返回值:合并数据之后的新数组
功能:合并数组
2. push() 是指往数组最后的索引位置添加数据 (末位)
var users = ["jack","tom","jerry"];
console.log(users); // ['jack', 'tom', 'jerry']
var res = users.push("tonny");
console.log(users);// ['jack', 'tom', 'jerry', 'tonny']
console.log(res); // 4
调用者:数组实例 users
参数:数据(目标元素)
返回值:数组长度
功能:往数组追加数据
3. pop() 删除数组中最后索引对应的数据
var user2 = ["jack","tom","jerry"];
var res2 = user2.pop();// 删除 "jerry
user2.pop();// 删除 "tom"
user2.pop();// 删除 "jack"
user2.pop();// 没数据可删除了
console.log(user2);// ["jack","tom"]
console.log(res2);// 返回被删除的数据
调用者:user2
参数:无
返回值:返回被删除的元素
功能:删除数组末位的元素
4. unshift() 在数组第一个索引值位置添加数据(首位)
var user3 = ["jack","tom","jerry"];
var res3 = user3.unshift("paike1");
user3.unshift("paike2");
user3.unshift("paike3");
user3.unshift("paike4");
console.log(user3);// ['paike1', 'jack', 'tom', 'jerry']
console.log(res3);// 4
调用者:user3
参数:新增元素(数据)
返回值:数组的长度
功能:往数组首位添加元素
5. shift() 删除数组中第一个索引对应的数据
var user4 = ["jack","tom","jerry"];
var res4 = user4.shift()
user4.shift()
user4.shift()
console.log(user4);// ['tom', 'jerry']
console.log(res4);// "jack"
调用者:users4
参数:无
返回值:返回被删除的元素(数据)
功能:删除数组首位的元素
6. slice() 截取数组中指定索引的元素
情况一、
仅有一个参数,且参数值不超过最大索引
console.log(arrColor.slice(7));// []
console.log(arrColor.slice(6));// ['white']
console.log(arrColor.slice(5));// ['gray', 'white']
console.log(arrColor.slice(-1));// ['white'] 如果是负值,从数组倒数开始截取数据
情况二、
参数1表示开始索引值,参数2表示结束的索引值
参数1(左) 参数2(右),截取数组元素的时候,是包左不包右
console.log(arrColor.slice(0,2));// ["red","green"]
console.log(arrColor.slice(4,6));// ["orange","gray"]
输出原数组
console.log(arrColor);
调用者: arrColor 数组
参数:索引值
一个参数
两个参数(包左不包右)
返回值:返回值是包含被截取元素的数组
功能:截取数组中指定索引的数据
应用场景:
网页数据分页
7. splice
splice 可以删除数中组指定索引的元素,并且返回被删除的元素,还可以插入元素
splice 这个方法会影响原数组!!
var arrColor = ["red","green","purple","yellow","orange","gray","white"];
// 0 1 2 3 4 5 6
情况一、
仅仅一个参数,且索引不大于最大索引6
var res = arrColor.splice(2);
console.log(arrColor);//["red","green"]
console.log(res);// ['purple', 'yellow', 'orange', 'gray', 'white']
调用者:arrColor数组
参数: 开始索引值 (仅仅一个参数)
返回值:返回被删除元素的数组,返回值是数组!!!
功能:删除数组中指定索引值开始的所有元素(包含索引值对应的元素)
情况二、
参数1表示开始索引值, 参数2表示删除元素的数量
想法:删除这些元素 "purple","yellow","orange","gray"
var res2 = arrColor2.splice(2,4);
console.log(arrColor2);// ['red', 'green', 'white']
console.log(res2);// ['purple', 'yellow', 'orange', 'gray']
调用者:arrColor数组
参数: 参数1表示开始索引值, 参数2表示删除元素的数量
返回值:返回被删除元素的数组,返回值是数组!!!
功能:删除数组中指定索引值开始的所有元素(包含索引值对应的元素)
情况三、
var arrColor3 = ["red","green","purple","yellow","orange","gray","white"];
// 0 1 2 3 4 5 6
参数1表示开始索引值, 参数2表示删除元素的数量 ,参数3+ 表示插入数组的数据
删除索引值为1开始的1个数据,并在当前位置插入数据"绿色","xxx","yyy"
arrColor3.splice(1,1,"绿色","xxx","yyy")
console.log(arrColor3);
总结:
1、可以删除数组指定索引的数据
2、可以获取数组指定的数据
3、可以往数组指定索引位置插入数据
区别数组中的slice 和 splice 方法。
slice 截取数据时,不会影响原数组
splice 截取数据时,会影响原数组
8. join() 把数组转成指定格式的字符串
var arr = ["11","22","33","a","b","c"];
var str = arr.join();
console.log(str);// 11,22,33,a,b,c
console.log(typeof str);// string
console.log(arr.join(""));// 112233abc
console.log(arr.join(" "));// 11 22 33 abc
console.log(arr.join("#"));// 11#22#33#a#b#c
9. forEach() 遍历数组
var arr2 = ["11","22","33","a","b","c"];
var res = arr2.forEach(function(item,index){// 形参
// console.log(item)// item 代表数组的每一项数据
// console.log(index);// index 代表每一项数据的索引值
})
console.log(res);// undefined
调用者:arr2数组
参数:匿名函数,也可以叫做回调函数
返回值:忽略 (undefined)
功能:主要作用是循环遍历数组
// 函数表达式
// var foo = function(){console.log()}
// foo();
// 匿名函数: 不具有函数名称的代码块 function(){}
// function(){} // 报错
// (function(){console.log("test")}); // 不报错
// (function(){console.log("test")})();// 不报错
// +function(){console.log("test")}()// 不报错
// -function(){console.log("test")}()// 不报错
// (function(){})();// 匿名函数,立即执行函数
10. sort() 主要是对数组进行排序或乱序
升序 值从小到大
降序 值从大到小
// 定义数组
升序
var res1 = arr.sort(function(prev,next){
return prev - next;
})
console.log(res1);// [10, 20, 30, 40, 60, 90, 100]
降序
var res2 = arr.sort(function(prev,next){
return next - prev;
})
console.log(res2);// [100, 90, 60, 40, 30, 20, 10]
console.log(arr);// [100, 90, 60, 40, 30, 20, 10]
调用者:arr 数组
参数:匿名函数
// function(a,b) { return a - b;} //升序
// function(a,b) { return b - a;} // 降序
返回值:返回值完成排序的数组
功能:对数组进行排序
// 复杂数据结构:
var data = [
{name:"学生1",score:90},
{name:"学生2",score:60},
{name:"学生3",score:80},
{name:"学生4",score:70},
{name:"学生5",score:85}
]
// 比如:取出学生2的分数?
// data[1].score ;// 60
// 思考一下:如何根据学生分数进行排序?
data.sort(function(a,b){
return a.score - b.score;
})
// console.log(data);
乱序
var arr = [10,30,40,50,60,70];
// arr 就是数组
// arr 它是构造函数Array的实例(具体的事物)
// 调用数组实例对象的sort方法
// sort 方法
arr.sort(function(){
// 根据随机小数和0.5相加的结果作为条件打乱原数组arr的顺序。
return Math.random() - 0.5;
})
// 控制台输出
console.log(arr);
// Math 是数学对象
// Math.random() 产生随机小数 0 ~ 1
欧克,以上是数组的,还不是全部!!!!已经吐了好吧!!
关于构造函数过程
首先写一下关于new出来的东西,和直接申明的东西有什么区别,额,大致就是new的时候,就是调用了String()函数,该函数会创建一个空对象作为容器来装入值,如下图:
然后该对象会将String的显示原型赋予new的对象的隐式原型(关于原型可以理解为一个公共区域,我在随笔中有写到),因此该对像会具有String的prototype。这里附上知乎大佬刘东写的new创建过程:
new关键字的实现过程是这样的:
创建一个空的对象 var str = {};
str.__proto__ = String.prototype
(可选)将str的构造函数指定为String;
将str对象通过String.call(str)初始化一下 // call() 初始化this对象
return str
可以看出new的东西都是对象。
var str = "STRING";就是一个基本类型,执行引擎在操作它的方法时会自动包装然后再销毁。
ok,我觉得这个基本上就可以解释该问题了,反正我是懂了的~
然后继续写字符API。。
1. concat() 合并字符串
var s1 = "你好 ";
var s2 = "世界!";
var res = s1.concat(s2);
console.log(res);
调用者:s1字符串
参数:s2字符串
返回值:
功能:合并
说实话该功能真的鸡肋,因为字符串可以依靠”+“号来拼接6,或许有的时候会很方便吧。
2. split() 把字符串切割成数组 (常用方法)
var str = "张三李四赵五孙六钱七";
var str = "张三,李四,赵五,孙六,钱七";
在控制台输出结果:
console.log(str.split());//['张三李四赵五孙六钱七']
// console.log(str.split(""));// ['张', '三', '李', '四', '赵', '五', '孙', '六', '钱', '七']
console.log(str.split(","));//['张三', '李四', '赵五', '孙六', '钱七']
调用者:字符串
参数:可选
返回值:把字符串切割之后的数组
功能:切割字符串,并且记录在数组中
3. indexOf 检索字符串中首次出现的字符的索引
// 字符串
// var str = "http://www.baidu.com";
console.log(str.indexOf("h"));// 0
console.log(str.indexOf("t"));// 1 首次出现的t字符的位
console.log(str.indexOf("!"));// -1 不存在 “!”字符
console.log(str.indexOf("www"));// 7
console.log(str.indexOf("http://"));// 0
4. lastIndexOf 检索字符串中最后一次出现的字符的索引
console.log(str.lastIndexOf("t"));// 2
console.log(str.lastIndexOf("."));// 16
字符串
var str1 = "http://www.baidu.com";
// 012345678910
两种方法都接受作为检索起始位置的第二个参数。
var str ="The full name of China is the People's Republic of China.";
var pos = str.indexOf("China",18);
var str ="The full name of China is the People's Republic of China.";
var pos = str.lastIndexOf("China",50);
lastIndexOf()方法向后进行检索(从尾到头),这意味着:假如第二个参数是 50,则从位置 50 开始检索,直到字符串的起点。
这里备注一个与indexOF功能类似的方法search()
var str ="The full name of China is the People's Republic of China.";
var pos = str.search("locate");
两种方法,indexOf()与search(),是相等的。
这两种方法区别在于:
search() 方法无法设置第二个开始位置参数。
indexOf() 方法无法设置更强大的搜索值(正则表达式)。
5. slice 截取字符串
情况一、
仅仅一个参数,且参数的值是小于 str.length
console.log(str1.slice(1));// "ttp://www.baidu.com"
console.log(str1.slice(2));// "tp://www.baidu.com"
console.log(str1.slice(3));// "p://www.baidu.com"
情况二、
参数1、参数2
参数1表示开始索引值 ,参数2表示结束索引值 (包左不包右)
console.log(str1.slice(0,4));// "http"
console.log(str1.slice(11,16));// "baidu"
情况三、
参数是负数,倒数截取字符
console.log(str1.slice(-1));// "m"
console.log(str1.slice(-2));// "om"
console.log(str1.slice(-3));// "com"
开始索引值要小于结束索引值
console.log(str1.slice(-1,-2));// 截取不到字符
console.log(str1.slice(-2,-1));// "o"
console.log(str1.slice(-3,-1));// "co"
6.0 substr
var str2 = "http://www.baidu.com";
// 012345678910
console.log(str2.substr(1));// "ttp://www.baidu.com"
console.log(str2.substr(-1));// "m"
参数1表示开始索引值 参数2截取的字符长度
console.log(str2.substr(5,2));// "//"
console.log(str2.substr(11,5));// "baidu"
7.0 substring 类似slice是一样的作用
var str3 = "http://www.baidu.com";
// 012345678910
参数不能是负值
console.log(str3.substring(-2));
console.log(str3.substring(1)); //"ttp://www.baidu.com"
console.log(str3.substring(7,10)); // "www"
三种方法总结:
slice(start,end)
substring(start,end)
substr(start,length)
8. replace() 替换字符
var str = "我喜欢你,小花";
// 把"小花"替换成"小明"
var msg = str.replace("小花","小明");
console.log(str);// "我喜欢你,小花"
console.log(msg);// "我喜欢你,小明"
调用者:字符串
参数:参数1,参数2
返回值:替换字符之后的字符串
功能:替换字符
9. replaceAll 替换字符串文本中指定格式的所有字符
定义字符串
var html = "<div></div>";
// 替换div为span
// console.log(html.replace("div","span"));
console.log(html.replaceAll("div","span"));// "<span></span>"
10. toUpperCase 把字母字符转大写
// 定义字符串
var str = "hello world";
console.log(str.toUpperCase());// "HELLO WORLD"
11. toLowerCase 把字母字符转小写
var txt = "ABCDEFGHI";
console.log(txt.toLowerCase());// "abcdefghi"
12. charAt 根据索引值检索文本中的字符
var str = "helloworld"
// 0123456789
console.log(str.charAt(1));// "e"
console.log(str.charAt(4));// "o"
console.log(str.charAt(9));// "d"
13. charCodeAt 检索字符对应的unicode编码 最大整数 655535
// unicode编码 规范世界上所有字符的一个方案(字典)
var str2 = "abcdef"
// 012345
console.log(str2.charCodeAt(0));// 97 此处的97是指 "a"字符对应的数值(unicode码)
console.log(str2.charCodeAt(1));// 98 此处的97是指 "b"字符对应的数值(unicode码)
ok大概就这些,剩下一个快速排序,这里就不记了,我还没弄透,我再研究一下。。明天写