JavaScript基础补充,(短路赋值,预编译,递归)

254 阅读3分钟

js基础补充

js作用

操作 html + css
动态渲染数据

数据类型:

number / string / boolean / null / undefined
判断数据类型: typeof
转换:
转字符串 String() +
转数字 Number() + / - / * / / / % Math.round() Math.floor() Math.ceil()
parseInt()
在把小数转为整数的时候 == Math.floor()
还可以取出字符串里面的小数(字符串里面的第一位数字开始,到第一个非数字结束)
parseFloat() 取小数

parseInt:

// 提取到第一个非数字为止的整数
        var m = parseInt('.24.5px2');
        console.log(m); // NaN

        var m = parseInt('0.24.5px2');
        console.log(m); // 0

        var m = parseInt('24.5px2');
        console.log(m); // 24


        var m = parseInt(24.5);
        console.log(m); // 24

parseFloat:

    var m = parseFloat('24.5px');
        console.log(m); // 24.5

判断

if switch

循环:

while for
break ,continue
死循环

函数

系统函数 , 自定义函数
封装性,复用性,调用性
匿名函数:自调用(一次性函数):+function(n){console.log(n)}(666s)

函数的封装
语法 function name(形参1,形参2,...) {}
提取形参 是否需要返回值
注释!!!!!!!!!!!!
调用
形参(函数声明),实参(函数调用)
return 给函数一个返回值 会提前结束整个函数

短路赋值

运用逻辑运算,就是为了当函数调用时没有赋值或者形参与实参不对等,但是要求有输出值时可以运用短路赋值。
与运算:见假即假,或运算:见真即真,

        var n = 1 || 2; // n = (1 || 2)   // n = 1
        console.log(n);

        var n = 0 || 3; // n = (0 || 3)   // n = 3
        console.log(n);

        var n = 1 && 2; // n = (1 && 2)   // n = 2

        var n = 0 && 3; // n = (0 && 3)   // n = 0

例如:在给求和封装一个函数中

function sum(a, b) {
            //当a没有传参时,a的值就为后面的0;运用或运算
            a = a || 0;
            b = b || 0;
            return a + b;
        }
        console.log(sum())//没有实参

作用域

变量是有作用域的
优先找自己的,自己找不到就找向上一级查找,一直找到script为止,一直找不到就报错
全局作用域 -- 全局变量
在函数外面声明的变量 没有var 的变量
局部作用域 -- 局部变量
在函数内部声明的变量(形参本质上是一个局部变量)

js的特色---预编译(毕竟是不规范的,也许以后更新了会不存在,会在面试题中出现)

js代码的执行分两个阶段
预编译阶段
首先会找到所有的var声明的变量
找到所有的具名函数
代码执行阶段
你看到的代码:

        console.log(a);    // undefined
        var a = 10 ;
        console.log(a);   // 10

实际上js解析的:

        var a ;
        console.log(a);
        a = 10 ;
        console.log(a);

难度加大: 你看到的:

console.log(a);
        var a = 10;
        a()

        function a() {
            console.log(3);
            var b = 4;
        }
        console.log(b);
        var b = 5;
        console.log(b);
        console.log(a);

实际上js解析的:

 var a ; 
        var b ;
        function a() { 
            // 在函数内部也有预编译
            var b ; 
            console.log(3);
            b = 4 ;
        }
        console.log(a);  // f
        a = 10 ;
        a() ;    // a is not a function 
        console.log(b);   // undefined
        b = 5 ;
        console.log(b);   // 5

结果:

image.png

函数的递归

传递与回归,自己调用自己。(在控制台中用断点的方法理解传递与回归)
死递归:function fn (){ fn() }fn()
例如求1加到100的和,方法一肯定是好理解的用循环求,这是用递归来看

 function sum(n) {
            if (n == 1) {
                return 1
            }
            return n + sum(n - 1)
        }
        console.log(sum(100))