JavaScript进阶----关于数字的方法,Math对象,日期对象,定时器,函数,for in

关于数字的方法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
    <script>
        /*
        number数字
            在js里面的小数和整数统一都是数字,-2^53-2^53,超出范围之后精度就会不准确
        number方法
            Number()——参数中必须能被转换成数字,否则返回NaN:
            parseInt(解析的参数)——将参数转换为数字,整数部分遇到不是数字就停
            parseFloat()——将参数转换为数字,直到小数部分遇到不是数字就停
             Num.toFixed(n)——四舍五入保留n位小数
             NaN(Not a Number)
                NaN 不等于自己
         */
        var a = "aaa";
        console.log(Number(a));//NaN
        console.log(typeof Number(a));number

        var b = "999.566";
        console.log(parseInt(b));//999
        console.log(parseFloat(b));//999.566

        var c = 25.98;
        console.log(c.toFixed(1));//26.0
    </script>
</body>
</html>

Math方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
    <script>
        /*
       Math 数学函数
       Math.pow(16, 2)——十六的平方 256
       Math.round(5.5)——四舍五入(整数)
       Math.ceil(0.2)——向上取整
       Math.floor(0.9)——向下取整
       Math.max()——取参数中最大的值
       Math.min()——取参数中最小的值
       Math.random()——0-1的随机数[0,1)
       Math.random()*m+n
       生成 n ~ (m+n)
       Math.PI——π
       Math.abs()——求绝对值
       */

        console.log(Math.pow(2,4));//16
        console.log(Math.round(5.5));//6
        console.log(Math.ceil(0.2));//1
        console.log(Math.floor(0.9));0

        var x = Math.max(2,6,4,-5);
        console.log(x);//6

        var y = Math.min(2,6,4,-5);
         console.log(y);//-5

         console.log(Math.random());//[0,1)
        console.log(Math.random()*30 + 50);
        console.log(Math.PI);//3.141592653589793
    </script>
</body>
</html>

 时间对像:

获取当前时间

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
    <script>
        var data = new Date();
        var strap = data.getTime();
        // alert(strap);
        var year = data.getFullYear();
        var mon = data.getMonth()+1;//获取月份 取值为0~11之间的整数
        var date = data.getDate();
        var hour = data.getHours();
        var min = data.getMinutes();
        var sec = data.getSeconds();
        var day = data.getDay();

        document.body.innerHTML = year + "年" + mon + "月" + date + "日" + hour + "时" + min + "分" + sec + "秒"+ "星期"+ day;
    </script>
</body>
</html>

定时器 

  设置定时器:setTimeout    类似于python的sleep方法,只能设置一次定时

  清除定时器:clearTimeout

  设置定时器:setInterval     会根据时间一直定时

  清除定时器:clearInterval

 

定时器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
    <script>
        //延迟定时器 5000毫秒后执行一次且只执行一次
        setTimeout(function () {
            console.log(1);
        },5000);

        //隔1000毫秒一直不停地 在执行
        setInterval(function () {
            console.log(2);
        },1000);

        //setInterval(函数,时间);

        function fn() {
            console.log(3);
        }

        setInterval(fn,1000);
    </script>
</body>
</html>

清除定时器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
    <div id="box">
        <p>还有<span id="time">5s</span>我就去百度啦</p>
    </div>
    <script>
        var oTime = document.getElementById("time");
        var num = 5;
        var timer;

        timer = setInterval(function () {
            num --;
            oTime.innerHTML = num + "s";
            if(num === 0){
                clearInterval(timer);
                //clearTimeout();
                window.location.href = "http://www.baidu.com";
            }
        },1000);
    </script>
</body>
</html>

写一个关于时间倒计时和数字时钟的页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>倒计时</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        #fight{
            height: 200px;
            line-height: 200px;
            text-align: center;
            font-size: 25px;
        }
        #fight span{
            color: red;
        }
        #time{
            height: 100px;
            line-height: 100px;
            text-align: center;
            color: cornflowerblue;
            font-size: 28px;
        }
        #time span{
            color: red;
            font-size: 20px;
        }
    </style>
</head>
<body>
    <div id="fight">敌人还有<span>5</span>秒到达战场!</div>
    <div id="time">现在是北京时间:<span></span></div>

    <script>
        //倒计时
        var num = 5;
        var timer;
        var oFight = document.querySelector("#fight");
        var oNum = document.querySelector("span");
        var oTime = document.querySelector("#time span")

            timer = setInterval(function () {
            num --;
            oNum.innerHTML = num;
            if(num === -1){
                clearInterval(timer);
                oFight.innerHTML = "碾碎他们!"
            }
        }, 1000);

        function times() {
            // 时间
            var data = new Date();
            var year = data.getFullYear();
            var month = data.getMonth() + 1;
            var day = data.getDate();
            var hour = data.getHours();
            var minutes = data.getMinutes();
            var second = data.getSeconds();

            function change_time(n) {
                return n < 10 ? "0" + n : n ;
            }
            month = change_time(month);
            day = change_time(day);
            hour = change_time(hour);
            minutes = change_time(minutes);
            second = change_time(second);

            Time = year + "年" + month + "月" + day + "日" + hour
                + ":" + minutes + ":" + second;
            oTime.innerHTML = Time;
        }
        times();
        setInterval(times,1000);

    </script>
</body>
</html>


 

PS:清除定时器的时候,要给定时器起个名字

函数

 

有名函数

匿名函数

函数表达式

函数传参

返回值

有名函数和匿名函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        div{
             200px;
            height: 200px;
            background: yellowgreen;
            margin-bottom: 5px;
        }
    </style>
</head>
<body>
    <div id="box1"></div>
    <div id="box2"></div>
    <script>
        /*
         函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块
         函数就是包裹在花括号中的代码块,前面使用了关键词 function:
           有名函数
                有名字的函数
                函数名加括号执行 / 充当事件函数执行
           匿名函数
                没有名字的函数
                匿名函数不能单独出现 一般充当事件函数
         */

        var oBox1 = document.getElementById("box1");
        var oBox2 = document.getElementById("box2");

        /*oBox1.onclick = function () {
            alert("xp真漂亮");
        };

        oBox2.onclick = function () {
            alert("xp真漂亮");
        }*/

        function fn() {
            alert("sqx真阔爱");
        }

        fn();//弹出sqx真阔爱
        // oBox1.onclick = fn;
        // oBox2.onclick = fn;
    </script>
</body>
</html>

函数定义和函数表达式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
    <script>
        /*
        函数表达式:
            () + - ! ~ 可以将匿名函数变为函数表达式
            特点:可以在后面加括号立即执行
         */

        // fn();
        //函数定义 可以在定义前加括号执行,也可以在定义后加括号执行
        function fn() {
            alert(1);
        }
        //fn();

        //函数表达式
        // fn1();
        //通过var 的函数,只能在后面运行******
        var fn1 = function () {
            alert(2)
        };
        // fn1();

        +function () {
            alert(3);
        }();

        -function () {
            alert(4);
        }();

        !function () {
            alert(5);
        }();

        ~function () {
            alert(6);
        }();

        (function () {
            alert(7);
        })();

        (+function () {
            alert(8);
        }());
    </script>
</body>
</html>

 实参   形参

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
    <script>
        //fn(9);//执行函数时 可以传递 实参(用已知的变量 / 具体的数据)

        var s = 9;
        // fn(s);
        //形参(相当于函数局部的变量,命名规则和var相同)(定义,无中生有)
        function fn(x) {
            alert(x);
        }


         //实参和形参个数不一定非得一样,但是不一样的时候要注意一一对应的关系
        sum(1,2,3,4,5,6);
        function sum(x,y,z) {
            // alert(x+y+z);
        }

        sum1(1,2,3);
        function sum1(a,b,c,d) {
            // var a , b, c , d;
            a = a || 0;
            b = b || 0;
            c = c || 0;
            d = d || 0;
            alert(d);
            alert(a+b+c+d);//NAN
        }
    </script>
</body>
</html>

 不定参

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
    <script>
        sum(1,2,3,4,5,6,7,8,9);
        function sum() {
            console.log(arguments.length);//9
            console.log(arguments[8]);//9
            var x = 0;
            for(var i = 0 ,len = arguments.length; i < len ; i ++ ){
                x += arguments[i];
            }
            console.log(x);//45
        }
    </script>
</body>
</html>

 return

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
    <script>
        /*
        每个函数默认返回 return undefined
         */
        function fn() {
            alert(1);
            return 6
        }

        var a = fn();
        alert(a);
    </script>
</body>
</html>

 作用域

   因为js的规则是先定义,再执行。所以,写代码的时候要注意一下这一点

  

子作用域会修改父作用域的值

   

作用域解析

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
    <script>
        alert(fn);
       var fn = function () {
           alert(1);
       };
       fn();

       /*
       1 找
        fn = undefined; ===》fn = function () {
                                   alert(1);
                               };
       2 执行
        fn = function () {
                   alert(1);
               };

        */
    </script>
</body>
</html>

作用域

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
    <script>
        /*
        javascript解析顺序
            1.(定义)先解析var function 参数
                a.该步骤的var只定义变量,后面的=赋值不解析
                b.该步骤的函数只定义函数,函数的执行不解析
                c.重名的只留一个,var 和 函数重名  函数优先
            2.(执行)再从上至下执行其他代码

            作用域:
                作用:读写
                域:范围,区域
            解析:
                从上至下
                    1 找 var 定义函数 参数
                    2 执行
         */

        /*alert(a);
        //var a;
        var a = 5;
        alert(a);*/

        /*
        1 找
            a = undefined == >a = 5;
        2 执行
            alert(a); ==》und
            a = 5;
            alert(a);===>5
         */

    /*alert(a);
    function a() {
        alert(5);
    }
    a();
    alert(a);*/

    /*
    1 找
        a = function a() {
                alert(5);
            }

    2 执行
        alert(a); ==》函数
        a();函数调用 是新的作用域 只要是作用域 解析时就要分两步
            1 找
            2 执行
                alert(5); ==》5
        alert(a);==》函数

     */

    /*var a = 1;
    function fn() {
        alert(2);
        var a = 5;
    }
    fn();
    alert(a);*/
    /*
    1 找
        a = undefined  == 》 a = 1;
        fn = function fn() {
                alert(2);
                var a = 5;
            }
    2 执行
        a = 1;
        fn();
            1 找
                a = undefined ==》5
            2 执行
                alert(2); ==》2
                a = 5;
       alert(a); == > 1

     */

    /*var a = 1;
    function fn() {
        alert(2);
        a = 5;
    }
    fn();
    alert(a);*/
    /*
    1 找
        a = und; ==》a = 1 ==》a = 5
        fn = function fn() {
            alert(2);
            a = 5;
        }
    2 执行
        a = 1;
        fn();
            1 找
            2 执行
                alert(2); ==》2
                a = 5;此函数没有的话 会从里往外找 去父级作用域
        alert(a); ===>5

     */

    </script>
</body>
</html>

 for in

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
    </style>
</head>
<body>
    <script>
        var obj = {"name": "xiaopo","age": 18, "gender": "girl"};

        console.log(obj);//{"name": "xiaopo","age": 18, "gender": "girl"}
        console.log(obj.length);//undefined
        console.log(obj.name);//xiaopo

        for(var key in obj){
            console.log(key,obj[key]);
            //key是{}里的属性名称 obj[key] {}里面属性的值
            //name xiaopo
            //age 18
            //gender girl
        }
    </script>
</body>
</html>
原文地址:https://www.cnblogs.com/pywjh/p/9598803.html