JS前端开发堆和栈、ES5新增属性、字符串概念
一、堆和栈
基本数据类型和引用数据类型的区别;
01、基本数据类型之间的赋值关系;按值传递
02、引用数据类型之间的赋值关系;按引用传递(按地址传递)
运行程序;
1,准备运行程序要用的空间(一旦分配好以后,内存大小没法改变了)
2,开始运行程序
【引用】数据类型
数组,数组的变量存储的是数组的地址。
栈的特点;先进后出,后进先出。
栈:当定义一个变量的时候,计算机就在内存中开辟一块存储空间存放这个变量,我们把这个空间叫做栈
栈的特点:先进后出(后进先出)
栈中存放的是基本类型的数据。
如果一个变量是引用类型,栈中存入的是引用类型数据所在堆中的地址
堆:堆中存入很多数据,一般存放的是对像(引用)类型的数据
冒泡排序
第一轮;五次
9,8,7,6,5,4
8,9,7,6,5,4
8,7,9,6,5,4
8,7,6,9,5,4
8,7,6,5,9,4
8,7,6,5,4,9
第二轮;4次
8,7,6,5,4
7,8,6,5,4
7,6,8,5,4
7,6,5,8,4
7,6,5,4,8
第三轮;3次
7,6,5,4
6,7,5,4
6,5,7,4
6,5,4,7
第四轮;二次
6,5,4
5,6,4
5,4,6
第五轮;一次
5,4
4,5
分析;
比较的轮数= 数组长度- 1
每一轮比较的数= 数组的长度 - 当前的轮数
例子;
var arr = [4,7,2,1,3];//
function maoPoSort(arr){
var temp = 0;
for (var i = 0; i < arr.length-1; i++) {//轮
for(var j = 0; j < arr.length-1-i; j++){ // 每轮多少次 4 3 2 1
//第一个和第二个,第二个和第三,
//如果前一个大于后一个,交换
if(arr[j] < arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
console.log(maoPoSort(arr));
选择排序;
选择排序(打擂台法)
规矩;选出一个位置,这个位置的数,和后面所有的数进行比 较,如果比较出大小就交换两个数的位置
每一轮都能选出一个最小的数,放在正确的位置上;
第一轮;
9,8,7,6,5,4
8,9,7,6,5,4
7,9,8,6,5,4
6,9,8,7,5,4
5,9,8,7,6,4
4,9,8,7,6,5
第二轮
9,8,7,6,5
8,9,7,6,5
7,9,8,6,5
6,9,8,7,5
5,9,8,7,6
第三轮
9,8,7,6
8,9,7,6
7,9,8,6
6,9,8,7
第四轮
9,8,7
8,9,7
7,9,8
第五轮
9,8
8,9
分析;
比较的轮数= 数组长度- 1
每一轮比较的数= 数组的长度 - 当前的轮数
例子;
var arr = [9,8,7,6,5,4];
//用擂台的下标
for(var i = 0; i < arr.length -1 ; i++){
//被比较的数的下标
for(var j = i+1 ; j < arr.length ; j++){
if(arr [i] > arr[j]){
var tmp = arr[i];
arr[i] = arr [j];
arr[j] = tmp;
}
}
}
alert(arr);
sort按数字排序
例子;
var arr = [1144,33,6,12,6,5,8];
var newArr = arr.sort(function(a,b){
//a-b从小到大
return b-a;
});
console.log(newArr);//[1144, 33, 12, 8, 6, 6, 5] (7)
console.log(arr);//原数组发生了改变//[1144, 33, 12, 8, 6, 6, 5] (7)
二、回调函数
//回调函数的处理
//回调函数:一个函数a的参数b也是一个函数,这个b函数就是a函数的回调函数、
例子;
function fn(box){
/*var box = function(){
console.log(1)
}*/
var num1 = 3;
var num2 = 5;
box(num1,num2);
}
fn(function(a,b){
console.log(a + b);
});
严格模式;
严格模式;写在哪个作用域下,在哪个作用域下生效;
“use strict”
[注意]尽量不要严格模式写在全局。
用了严格模式,会有什么变量?
1、全局变量声明时,必须写var
2、函数重名属性
3、arguments对象不允许被动态改变
4、新增保留字:implements , interface ,let ,package , protected , public ,static , yield,
严格模式的目的;
1、消除javaScript语法的一些不合理,不严谨之处,减少一些怪异行为,
2、消除代码运行的一些不安全之处,保证代码运行的安全。
3、提高编译器效率,增加运行速度;
4、为未来新的javaScript做好铺垫;
三、ES5新增属性
indexOf( );
格局;数组.index(item , start);
参数;item 任意的数据
start 下标,可以不传入,默认为0;
功能;在数组中查找第一次出现item元素下标,从start开始去查找;
返回值;-1 没有查找到
>=0 查找到的元素的下标;
例子;
var arr = [10,12,14,16,12,18];
var index = arr.indexOf(12,2);
alert(index); //4
forEach;
数组遍历
for循环
for...in
forEach (ECMA5新增)
var arr = [10,20,30,40,50];
arr.forEach(function(item, index ,arr){
item 当前遍历到的元素
index 当前遍历到元素下标
arr数组本身
document.write(item + "," + index + "," + arr+"<br/>")
})
map 映射
var arr = [10,20,30,40,50];
var newArr =arr.map(function(item, index ,arr){
//遍历要做的事情 映射关系
return item * 1.3;
});
alert(newArr);//13,26,39,52,65
alert(arr);//10,20,30,40,50]
filter()过滤
var arr = [10,20,30,40,50];
var newArr =arr.filter(function(item, index ,arr){
//过滤条件
return item > 20;
})
alert(newArr);//30,40,50
alert(arr);//10,20,30,40,50
some()某些
【注】在数组中查找是否符合条件的元素,有返回true,没有返回false。
短路查操作:只要找到符合条件的元素,后面的循环就停止了。
例子
var arr = [10,20,30,40,50];
var newArr =arr.some(function(item, index ,arr){
alert(item);// 只要找到符合条件的元素,后面的循环就停止了。【有这个 alert(item);只是运算过程,如果只需要结果,可以不要这个】
return item > 20;
})
alert(newArr);//true
alert(arr);//10,20,30,40,50
every()每一个;
【注】在数组中查找是否有符合条件的元素,有返回true,没有返回false。
短路查操作:只要找不到符合条件的元素,后面的循环就停止了。
var arr = [10,20,30,40,50];
var newArr =arr.every(function(item, index ,arr){
alert(item);
return item <100;
});
alert(newArr);//true
alert(arr);
reduce()归并
var arr = [10,20,30,40,50];
var res =arr.reduce(function(prev,next, index ,arr){
prev 第一次是 下标为0的元素
第二次开始 上一次遍历reduce 的值
next 从下标1开始,当前遍历到的元素
arr数组本身
alert(prev+ "," + next);/过程10,20/ 30,30/ 60,40/ 100,50/
return prev + next;
});
alert(res);//150结果
isArray ()精确的检测一个值是否是数组;
var arr = [3,4,5]
var obj = {};
精确的检测一个值是否是数组;
console.log(Array.isArray(arr));//true
console.log(Array.isArray(obj));//false
四、字符串
字符串概念;所有带单引号或者双引号的都叫字符串;
字符串声明;
1、通过new运算去声明字符串
2、省略new声明字符串
3、字符串常量赋值
【字符串下标】字符串,charAt(下标)
1、 charCodeAt()
格式;字符串. charCodeAt(下标)
功能;访问字符串中的对应下标字符的ASCII码值
2、 String.fromCharCode()
格式; String.fromCharCode( 码值1,码值2...);
(String字符串对象) 功能;将传入的ASCII码值转成对应的字符
返回值;组成的字符串
例子
var str = "hello";
alert(str.charCodeAt(3));//101
var str = String.fromCharCode(97,98,99,100);
alert(str);//abcd
str.substr( ); 字符串截取
* str.substr(index);//从index位置开始向后截取所有字符
* str.substr(index,length);//从index位置开始截取length个字符
例子、
var str = new String("what is your name,周");
console.log(str.charAt(1));//h 如下标不存在,返回空
replace();
格式;supStr. replace(oldStr,newStr );
功能;用newStr将oldStr替换,生成新的字符串;
参数;
1.第一个参数传入的是字符串只能替换一次
2.第一个参数 正则表达式
/XXX/ig i忽略大小写, g全局匹配
返回值;将换成的字符串
例子
var str = "how are you";
var res=str.replace("are","old are");
alert(res);//how old are you
alert(str);
【2】 split( ) 字符串分割
格式;字符串.split(分割符,length);
参数;
第一个参数,用这个分割符对原字符串进行分割;
第二个参数,控制返回的数组的元素格式,一般情况下不用
功能;
用分割符对原字符串,进行分割,将分割完毕以后的子串,放在数组中返回
返回值;数组
[注意]
1,相邻的两个分割符,会产生空字符串 “”
2.分割符是空字符串"",直接将每一个字符,单独分割成子串,放在数组中返回
例子1
var str = "how are you";
var arr = str.split(""); // ("")里面没有空格
alert(arr);//h,o,w, ,a,r,e, ,y,o,u
例子2
var str = "how are you";
var arr = str.split(" ",2);
alert(arr);//how,are
【3】 toLocaleUpperCase 转成大写
toLocaleLowerCase 转成全小写
例子
var str = "HelloWORLD";
alert(str.toLocaleLowerCase());//转成全小写
alert(str.toLocaleUpperCase())//转成全大写
str.trim();//去掉字符串左右两边空格。ie8下不支持
* str.trimLeft();//去掉字符串左边的空格。ie不支持
* str.trimRight();//去掉字符串右边的空格。ie不支
五、Math系列
Math. random()//返回0-1之间的随机数
Math,max(num1,num2)//返回较大的数
Math.min(num1,mum2)/返回较小的数
Math.abs(num)/绝对值
Math. round()四舍五入(成整数,只看小数点后一位)
Math.ceil(19.3)//向上取整
Math.floor(11,8)/向下取整
Math. pow(x,y)//x的y次方
Math.sqrt(num)//开平方
传入的参数是:弧度
Math.sin()正弦
Math.cos()余弦
Math.PI=180弧度
1弧度=Math.PI/180
本文地址:https://blog.csdn.net/Li8L9xF/article/details/107882220
上一篇: 深入15个HTML元素方法,你见过吗?
下一篇: 数字和英文换行