JS-冒泡排序/内置函数/预解析/new执行过程/遍历

(一)流程控制:

(二)循环

(三)数组

(四)数组排序:冒泡排序

(五)函数

(五)函数中arguments内置函数的使用

(六)声明函数的方式:命名函数/匿名函数

(七)全局变量和局部变量

(八)JS预解析

(九)对象

(十)new关键字执行过程

(十一)遍历对象for..in 循环


(一)流程控制:

1.顺序结构:按顺序执行

2.分支结构:if(){}         switch

三元表达式:条件表达式 ? 表达式1 : 表达式2

switch(num){

        case value1:                                case value2:

                执行语句1;                                        执行语句2;

                break;                                                break;        }

注意: num 的值和 case 里面的之相匹配的时候是全等(===)的,数据类型,请求地址,值均相等.

        switch和 if else if 的区别:(1).一般情况下可以相互替换

(2).switch处理比较精确,if else更灵活,常用于大范围判断

(3).switch进行条件判断后直接执行程序的条件语句,执行效率更高,if else需要判断多次

(4).分支比较少时,if else 执行效率更高

(5).分支比较多时,switch执行效率更高

(二)循环

  • for循环语句
  • while循环语句
  • do while循环语句

for循环:双层for循环,外层循环一次,内层循环全部执行

九九乘法表:

var str = '';
for(var i=1;i<=9;i++){
    for(var j=1;j<=i;j++){
        str+=j+'*'+i+'='+i*j+'\t'
    }
}
console.log(str)

do while循环        do{循环体}while(条件表达式)

continue break:

continue关键字用于立即跳出本次循环,继续下一次循环

break关键字:立即跳出整个循环

(三)数组

1.创建数组

var arr = new Array()

var arr = [ ]

2.访问数组元素 arr[0]从0开始

3.遍历数组:索引号从0开始,length从1开始的长度

var arr = [0,1,2,3,4,5]

for(var i=0;i<arr.length,i++){

console.log(arr[i])

}

4.数组中新增元素
修改length,        arr.length = number数值 长度改变,新增默认undefined

修改数组元素        arr.[10] = 新增值 

案例:

数组去重

var arr = [1,1,1,2,2,2];
var newArr = [];
for(var i = 0 ; i < arr.length ;i++ ){
    if(arr[i] != 1){
        newArr[newArr.length] = arr[i]
    }
}
console.log(newArr)

翻转数组:

var arr = [1,2,3,4,5,6,7,8,9]
var newArr = []
for(var i = arr.length-1;i>=0;i--){
    newArr[newArr.length] = arr[i]
}
console.log(newArr)

(四)数组排序:冒泡排序

冒泡排序:是一种算法,把一系列的数据按照一定顺序进行排列显示

var arr = [9,8,7,6,5,4,3,2,1];
for(var i=0;i<=arr.length-1;i++){
    for(var j=0;j<=arr.length-i-1;j++){
        if(arr[i] >arr[j+1]){
            var temp = arr[j];
            arr[j] = arr[j+1];
            arr[j+1] = temp
        }
    }
}
console.log(arr)

(五)函数

只要函数遇到return,就会把后面的结果返回给函数调用者,相当于 Fun()=return(...)

案例:

求数组中的最大值

function getArrMax(arr){
    var max = arr(0)
    for(var i=1;i<=arr.length;i++){
        if(arr[i]>max){
            max = arr[i]
        }
    }
    return max
}
var maxArr = getArr([1,2,3,4,5])
console.log(maxArr)

变量名为名词,函数名为动词

注意:

return语句之后的代码不被执行

return只能返回一个值,如果逗号隔开,以最后一个为准

函数没有return返回undefined

break,continue,return的区别:
break:结束当前的循环

continue:跳出本次循环,继续执行下一次循环

return:不仅可以跳出循环,还能够返回return语句中的值,同时还可以结束当前函数体内的代码

(五)函数中arguments内置函数的使用

有不确定个数参数传递时,可以使用arguments来获取,在JS中,arguments实际上是当前函数的一个内置参数,所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参

注意:arguments是一个伪数组,可以进行遍历,伪数组的特点:

  1. 具有length属性
  2. 按照索引的方式进行存储
  3. 不具有数组的pop,push等方法

案例:
利用函数翻转数组:

function arrPop(arr){
            var newArr = [];
            for(var i = arr.length-1;i>=0;i--){
                newArr[newArr.length] = arr[i]
            }
            return newArr
        }
        var arr1 = arrPop([1,2,3,4,5])
        console.log(arr1);

利用函数实现冒泡排序:

function sort(arr){//sort排序
    for(var i=0;i<arr.length-1;i++){
        for(var i=0;j<arr.length-i-1;j++){
            if(arr[j]>arr[j+1]){
                var temp = arr[j]
                arr[j]=arr[j+1]
                arr[j+1]=temp
            }    
        }
    }
    return arr
}
var arr=sort([1,9,2,8,3,7,4,6,5])
console.log(arr)

(六)声明函数的方式:命名函数/匿名函数

1.命名函数

function fn( ){   };

fn( );

2.匿名函数

var fun = function( ){   }

fun( );

(七)全局变量和局部变量

全局变量:只有浏览器关闭的时候才会销毁,比较占内存

局部变量:执行完代码块就会销毁,比较节约内存

(八)JS预解析

作用域链:根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称为作用域链

预解析:

1.JS引擎运行js代码分为 预解析--代码执行

预解析:会把js中所有var/function提升到当前作用域最前面

代码执行:按照代码书写的顺序从上往下执行

2.预解析分为 变量预解析(变量提升)和函数预解析(函数提升)

变量提升:把所有变量的声明提升到当前作用域的最前面,只提升变量声明,不提升变量赋值

函数提升:把所有的函数声明提升到当前作用域的最前面,不调用函数

(九)对象

1.对象是由属性和方法组成的:

属性:事物的特征,常用名词        方法:事物的行为,常用动词

2.创建对象的三种方式:
(1).利用字面量创建对象

        var person = {

        name:'小红',                                             console.log(person.name)

        sayHello:function(){      }  }                        person.sayHello()

(2).利用new.object创建对象

        var obj = new Object()//创建空对象

        obj.age = 10;//追加属性                                                 console.log(obj.age)

        obj.sayHello = function(){     }//追加方法                        obj.sayHello()

(3).利用构造函数创建对象

function 构造函数名(){                               

        this.属性 = 值;                                           

        this.方法 = function(){  }    }                         

function Star(name,age){

        this.name = uname;        

        this.age = uage   

        this.sayHello = function(say){

                console.log(say)  }   }

var person1 = new Star("小红",10)

console.log(person1)

person1.sayHello("hello")

注意;

构造函数名首字母大写

构造函数不需要return就能返回值

new 构造函数名 =>创建空对象

(十)new关键字执行过程

new关键字可以在内存中创建一个空对象

this指向刚才创建的空对象

执行构造函数中的代码,给空对象添加属性和方法

返回这个在内存中创建的新对象(构造函数不需要return的原因)

(十一)遍历对象for..in 循环

for(变量 in 对象){        }

for(var k in obj){        //通常写为 k 或者 key 

console.log(k)        //k变量 输出得到的是属性名

console.log(obj[k]) } //obj[k] 得到的是属性值

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值