简单的常用系统函数、变量提升和作用域

120 阅读3分钟

常用系统函数

1. parseInt()

parseInt() 函数可解析一个字符串,并返回一个整数。也可以强行改变字符串类数字,返回值取整 例:

let num = 12.12;
    let num2 = parseInt(num);
    console.log(num2);//返回值12

2. parseFloat()

parseFloat() 函数可解析一个字符串,并返回一个浮点数。如果是10.10 回去掉0 例:

let num = 12.20;
    let num2 = parseFloat(num);
    console.log(num2);//返回值12.2
    

3. isNaN()

isNaN() 函数用于检查其参数是否是非数字值。
如果参数值为 NaN 或字符串、对象、undefined等非数字值则返回 true, 否则返回 false。

    document.write(isNaN(5-2)+ "<br>");//返回值false
    document.write(isNaN(0)+ "<br>");//返回值false
    document.write(isNaN("Hello"));//返回值true
    

练习

判断pormpt内容是不是数字 是打印在页面上并化简浮点数 不是弹出不是数字 代码如下:

function fn(){
        let a = parseFloat(prompt('请输入内容'));
        if(isNaN(a)){
            alert('不是数字');
        }
        else{
           document.write(a);
        }
    }
    

二、变量提升

1.声明变量var

当你使用var的时候会出现变量提升的情况,例如:

   console.log(a); //返回值undefined
    var a = 10;
    
   运行解析:
   var a ;
   console.log(a);
   a = 10;
   

2.声明变量let

let不存在变量提升,例如:

console.log(a);//报错
    let a = 10;

3.函数function

页面一加载的时候回先找有没有var和function
如果发现有var 就会把变量预定为undefried
如果发现有function 就会把function这个方法放在最前面

fn();
    var a = '123';
    function fn(){
        document.write(a);
    }
  打印结果:undefined
 运行解析:
 function fn(){     初始化变量提升 var a ; 
        document.write(a); //a = undefined
    }
  a = '123'

练习一

使用函数和数组的知识,实现两个点击按钮
一个按钮点击pormpt框,输入增加学员的姓名
一个按钮点击显示多少名学员,以及学员姓名打印在页面上

代码如下:

   <button onclick="fn()">点击新增学员</button>
   <button onclick="xs()">点击显示学员</button>
   <script>
   let arr = []; //创建一个全局变量的空数组
    function fn(){   //定义第一个按钮
        let a = prompt('学员姓名');
        arr.push(a);
    }
    function xs(){   //定义第二个按钮
        document.write('共'+arr.length+'名学员,信息如下:'+'<br>'+arr);
    }
    </script>
    

练习二

使用两个porpmt输入数字比较大小 代码如下:

 function fn(){
        let a = parseInt(prompt('请输入一个数'));
        let b = parseInt(prompt('再来一个'));
        if(a > b){
            return alert('第一个数'+ a + '比较大');
        }else if(a < b){
            return alert('第二个数'+ b + '比较大');
        }else if(a == b){
           return alert('两个数相同等大');
        }else{
            alert('不能有值为空或是字符串,重新输一次');
            fn();
        }
    }
    fn();
    

三、作用域

1.全局作用域

全局作用域 --- 在任何地方都能访问 函数外定义的变量拥有全局作用域 不使用var定义的变量拥有全局作用域 所有window对象上的属性拥有全局作用域 没有声明在任何函数内部的函数拥有全局作用域

  a = '123';
    function fn(){
        document.write(a);
    }
    fn(); //会在页面打印出123
    
  未定义的表里就是全局作用域;

2. 局部作用域

局部作用域 --- 只能在函数内部访问 使用var在函数内部定义的变量,和使用function在函数内部声明的函数,拥有局部作用域

    function fn(){
      var  a = '123';
        document.write(a);
    }
    fn();  页面会打印123
    console.log(a)//报错   因为函数内部的是局部作用域 在外部没有定义a
 

3.作用域链

可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性该内部属性包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链

let a = '你好';
function fn(){
    document.write(a);
}
fn();//调用这组函数 页面会打印出 你好;

let a = '你好';
function fn(){
    a = 'Hello';    //找到了a 返回a 就不会向上找了
    document.write(a); //向上寻找 
}
fn();//调用这组函数 页面会打印出 Hello 

let a = '你好';      //在这一层找到了a
function fn(){
                    //这一次也没有找到
    function fn(){
    document.write(a); //这个函数内部没有 向上层寻找
    }
}
fn();//调用这组函数 页面会打印出 你好 

代码分析:
作用域链 首先会在函数内部找变量a对应的值 
如果在内部没有找到对应的值  就会一层一层向外寻找