JavaScript(二)

96 阅读1分钟

闭包

概念:函数使用了不属于自己的局部变量,这种结构叫闭包(函数套函数,且里面的函数用了外面函数的局部变量)

问题:变量放在全局不安全,容易被篡改

闭包作用:保护变量的/避免全局污染

性能问题:内存泄漏/溢出 作用域中的局部变量一直被使用着,导致该作用域释放不掉

//计数器
        function add() {
            var n = 0;
            /*var fn = functopn(){return n++}*/
            function fn() {
                return n++;
            }
            return fn;   
        }
        var c = add();
        /*
        1.var c = functopn(){return n++}
        2.function c(){
            return n++
        }
        */
        console.log(c());
        console.log(c());
        n = 100;
        console.log(c());
        console.log(c());
        console.log(c());

循环语句

循环:程序反复执行一套相同的代码

循环三要素:

1.循环变量:循环中做判断的量 循环变量一定是向着循环退出的趋势去变化

2.循环条件:保证循环继续运行的条件

3.循环体:循环中每次要做的事

while循环:

/*
while(循环条件){
		要做的事
}
*/

var n = 0;
while(n<5){
  console.log("循环一次");
  n++;
  }

for循环 (和while作用相同但比while更优雅)

用途:用作数组遍历

/*
for(var i=0;i<10;i++){
  要做的事
  }
*/

for(var i=0;i<10;i++){
  console.log("循环一次");
}

循环嵌套

/*循环嵌套*/
for(var n=0;n<5;n++){
  for(var j=0;j<5;j++){
    console.log("循环一次");//输出25次
  }

/*九九乘法表*/
for()

数组

数组:多个变量的集合,批量存储多个同类数据,多个数据以逗号隔开

1.数组是没有任何数量限制

2.可以存不同类型的数据(但是在实际项目中没意义)

3.数组中的每一个数据都有一个索引(第一个索引默认为0)

/*
数组的访问:数组名[角标]
数组的更改 :数组名[角标]=新值
数组的属性:length 直接返回数组的长度
空数组: var arr=[];
*/
var arr=[1,2,3,4,5];
console.log(arr[1]);//2
arr[1] = 8;
console.log(arr.length);//5

两个关键字:break continue

break:直接退出循环

continue:跳过当前循环

对象

定义

对象:多个变量的集合 ,用来存储多个数据的 是由多个键值对组成的

1.对象的属性值是不限制数量的

2.对象的属性值是不限制数据类型的

3.对象的属性名一定是字符串,属性名可以省略引号,如果不加,js会自动帮你添加

操作

var car = {name:"benz",type:"g63"}
/*取值:对象.属性名*/
car.name;
/*
改值:对象.属性名=新值 
如果本身存在这个属性就是更改,本身如果没有,那就是添加
*/
car.name="bmw";
/*删值:delete 对象.属性*/
delete car.name;
/*对象的属性名如果是变量的话,那么需要加 [ ]*/
var a = "type";
var car = {name:"benz",[a]:"g63"}//a是变量所以加[]
/*
对象的循环:
for(var 变量名 in 要遍历的对象){
	变量名代表的是属性
}
*/
for(var key in car){
  console.log(key);
}

分类

内置对象

面向对象:通过操作对象去实现需求,不关心其中的过程

面向过程:

内置对象:js中已经存在的,有着现成的属性和方法供我们使用

js中一共26个内置对象

自定义对象:我们自己创建的对象

基本包装类型:为了便于操作“基本类型值”,JS 提供了 三个 特殊的引用类型:Boolean、Number、String。这些类型和其他引用类型相似,但同时 也具备 与各自基本类型相应的特殊行为。 实际上:每当读取一个基本类型值的时候, “后台就会创建一个 对应的基本包装类型的对象”,从能能够调用一些方法来操作这些数据。

String对象(字符串是不容更改的)

stirng属性:

length

stirng方法:

/*
toUpperCase(转大写)
toLowerCase(转小写) 
*/
var str="hello";
str=str.toUpperCase();
console.log(str);

/*
substring/slice(截取子字符串) 含头不含尾
如果只给一个参数,代表从哪一位开始截取,截到最后
substring和slice区别:substring截取字符串,slice截取数组
*/
var str="hello";
var a=str.substring(1,2);
console.log(a);//e [含头不含尾]

/*
indexOf(查找关键字) 返回 关键字符的角标 
找到就结束 找不到返回-1
*/
var str ="hello"
console.log(str.indexOf("o"));//4
console.log(str.indexOf("l"));//2  默认找第一个,找到就结束

var str ="where are you from";
console.log(str.indexOf("are"));//6 空格也是字符

/*
split(切割符) 可以把字符串切割成数组
把字符串一切为二,分成两个数组
*/
var str="hello";
var arr=str.split("e")
console.log(arr);//['h','llo']

/*.
toString(转成字符串)(显式类型转换)
number bool 也有toString方法
*/

array对象(数组可以更改)

array属性:

length

array方法:

//不能直接修改原数组的方法
/*
toString(转成字符串)
length
indexOf() 查找关键字 
slice()截取子数组
var arr=["h","e","l","l","o"];
var narr=arr.slice(1,3);
console.log(narr);

join(连接符) 把数组连接成字符串 结果一定是字符串
var arr=["h","e","l","l","o"];
var narr=arr.join("");
console.log(narr);

map() 对数组进行处理,返回一个全新的数组
filter()返回一个符合指定条件的数组
*/

//可以直接修改原数组的方法
/*
push()向数组的结尾追加元素
var arr=[1,2,3]
arr.push(4);
unshift()向数组开头追加元素
pop()删除数组最后一位元素
shift()删除数组第一位元素
var arr=[1,2,3]
arr.pop();//返回值是被删除那项
console.log(arr);

splice(从哪一位开始删除,删几个,新值) 在任意位置添加,删除,替换元素
var arr=[1,2,3,4];
arr.splice(1,1);//从第一位开始删,删一个
console.log(arr); 

reverse()数组反转
var arr=[1,2,3,4]
arr.reverse();
console.log(arr);

sort()数组排序,按照编码排序
*/

冒泡排序

/*冒泡排序*/
var arr=[12,78,123,9,65,36];
for (var j = 0; j < arr.length-1; j++) {
    for (var i = 0; i < arr.length-1-j; i++) {
        if (arr[i] > arr[i + 1]) {
            var box = arr[i]
            arr[i] = arr[i + 1];
            arr[i + 1] = box
        }
    }
}
console.log(arr);

数组去重

 var arr=[1,"hello","我",true,12,9,7,9,1,1,1,0,"我",11];
        for(var i=0;i<arr.length;i++){
            for(var j=i+1;j<arr.length;j++){
                if(arr[i]==arr[j]){
                    arr.splice(j,1);
                    j--;  
                }
            }
        }
        console.log(arr);