第二周

97 阅读1分钟

1、*****数组的API
\

排序:两种方式:\


①、笔试题:冒泡排序:把数组中的每一个数字取出来,前一个和后一个进行比较,如果前一个>后一个,两者就要交换位置:

公式:


var arr=[13,25,4,3675,12,23,3,215,2,1,42,4,65,473,2431,123];
for(var j=0;j<arr.length-1;j++){
for(var i=0;i<arr.length-(j+1);i++){
if(arr[i]>arr[i+1]){
var m=arr[i];
arr[i]=arr[i+1];
arr[i+1]=m;
}
}
}
console.log(arr);

②、正式开发中:数组API提供的排序

arr.sort();
特殊:a、默认按照字符串按位PK每个字符的unicode号排序

b、按照数字排序:

arr.sort(function(a,b){//回调函数:不需要我们程序员调用的函数:悄悄的带有循环,提供了两个形参:a是后一个数,b是前一个数
return a-b;
})

return a-b:如果a>b,返回是一个正数

如果a<b,返回是一个负数

如果a==b,返回是一个0,sort根据你反复的结果,来判断两者要不要交换位置

③、降序排列:

arr.sort(function(a,b){
return b-a;
})

强调:JS中只有数组可以排序,以后我们见到网页上任何具有排序功能的案例,底层一定都是一个数组
\

栈和队列:4个API:添加元素和删除元素的新方式\

 
栈:一端封闭,只能从另一端进出的操作

开头进:arr.unshift(值1,...);
开头出:var first=arr.shift();//一次只能删掉一个,并且会返回删除的元素
缺点:每一次进出都会修改其他人的下标

结尾进:arr.push(值1,...);
结尾出:var last=arr.pop();//一次只能删掉一个,并且会返回删除的元素
优点:不会影响到其他元素的下标

队列:只能从一端进入,另一端出

开头进:arr.unshift(值1,...);
结尾出:var last=arr.pop();//一次只能删掉一个,并且会返回删除的元素

结尾进:arr.push(值1,...);
开头出:var first=arr.shift();//一次只能删掉一个,并且会返回删除的元素
# 2、二维数组:数组中的值再次引用了一个数组
何时使用:在一个数组内在此细分内容

1、创建:

var arr=[
["张三丰",128,3500],
["张翠山",30,4500],
["张无忌",18,5500]
];

2、访问:arr[r][c];

特殊:

列下标越界:返回undefined
行下标越界:报错:undefined不能使用[]

3、遍历二维数组:必然需要两个循环嵌套:外层循环控制行,内层循环控制列

for(var r=0;r<arr.length;r++){
for(var c=0;c<arr[r].length;c++){
console.log(arr[r][c]);
}
}

# 3、*****String的概念:

string:字符串:多个字符组成的【只读】字符【数组】

1、为什么字符串也可以叫数组呢?

和数组有共同点:
①、支持下标 - 获取某个字符
②、支持length - 字符的长度
③、遍历
④、数组不修改原数组的API,字符串也可以使用(concat、slice)

不同点:数组修改原数组的API,字符串都不可以使用,但是字符串也有很多属于自己的API

2、只读:字符串中的所有的API都不会修改原字符串,只会返回新字符串

3、***引用类型的对象:11个

String(字符串) Number(数字) Boolean(布尔) - 具有包装类型

Array(数组) Function(函数) Math(数学) Date(日期) RegExp(正则) Error(错误) Object(面向对象)

Global - 全局对象:在浏览器端被window对象给代替了:window对象可以省略不写出来

包装类型:将原始类型的值变为一个引用类型的对象

为什么:前辈们发现字符串/数字/布尔经常都会被拿来使用,所以提前提供了包装类型封装为一个引用类型的对象,提供我们一些属性和方法(便于程序员操作)

何时使用:只要在你试图用原始类型的值去调用属性或者方法时,会自动套上包装类型

何时释放:属性或方法调用完毕后,包装类型自动释放

为什么undefined和null不能使用.:不具有包装类型,没有任何的属性和方法 1、*****String 的API:

1、转字符串:\
作用:3个

①、字符串中如果出现了和字符串冲突的符号,可用 \ 将其转义为原文。

" '

②、特殊功能:

换行:\n
制表符:\t

③、*可以书写unicode号 表示一个字

\uXXXX
汉字的第一个字:4e00
汉字的最后一个字:9fa5

2、*转换大小写:【统一的】转为大写或小写,再比较,忽略大小写:- 验证码

转大写:var newStr=str.toUpperCase();
转小写:var newStr=str.toLowerCase();

3、获取字符串中指定位置的字符的ascii码

var ascii=str.charCodeAt(i);

通过ascii码转回原文

var 原文=String.fromCharCode(ascii);

4、*检索字符串:检查索引/下标:

从starti位置开始找右侧的第一个关键字的下标

作用:判断有没有

var i=str/arr.indexOf("关键字",starti);
特殊:①、starti可以省略,如果省略则从0开始

②、返回值:找到了,返回第一个字符的下标

没找到,返回-1,其实我们根本不关心下标是几,只关心下标是不是-1,-1代表没找到,不是-1代表找到了

③、数组也可以使用此方法

④、鄙视题:找到所有关键字的位置

var str="no zuo no die no can no bibi";
var i=-1;
while((i=str.indexOf("no",i+1))!=-1){
console.log("找到了:"+i);
}

5、拼接字符串:

var newStr=str.concat(str1,str2...) 还不如 +运算

6、*截取字符串:3个

1、**var subStr=str/arr.slice(starti,endi+1);
2、var subStr=str.substring(starti,endi+1);//不支持负数参数
3、*var subStr=str.substr(starti,n);//截取的个数,不必考虑含头不含尾

7、*替换字符串:

var newStr=str.replace("关键字"/正则表达式,"新内容");

8、*****切割/分割字符串:作用:str <=> arr

var arr=str.split("自定义切割符");
特殊:

①、切割符可以自定义,切割过后返回一个数组,数组中不再包含切割符

②、如果传入的切割符是一个"",每一个字符都会被切开

# 扩展:创建元素并且渲染页面

1、创建空标签

var elem=document.createElement("标签名");

2、设置必要的属性或事件

elem.属性名="属性值";
elem.on事件名=function(){函数体} - 事件都可以在创建时提前绑定上

3、创建好的元素渲染到DOM树上

父元素.appendChild(elem);