Javascript的Math和Date

169 阅读7分钟

#Math对象的属性和方法

Math对象是一个数学对象,不是构造函数
构造函数实例化对象是使用new方式
<script>
    PI 方法
    console.log(Math.PI)
    
    max 方法
    console.log(1,100,10,20) 输出100
    console.log(Math.max()) 负无穷大 -Infinity
    
    min 方法
    console.log(Math.min(1,50,60,200,-50)) 输出-50
    console.log(Math.min("-40", 50, 30, -30)) 输出"-40"
</script>

#自己封装一个Math对象

<script>
    var myMath = {
        PI: 3.141592653,
        
        max: function(){
            var max = arguments[0];
            for(var i = 1; i < arguments.length; i++){
                if(arguments[i] > max){
                    max = arguments[i]
                }
            }
            return max;
        },
        
        min: function(){
            var max = arguments[0];
            for(var i = 1; i < arguments.length; i++){
                if(arguments[i] < max){
                    max = arguments[i]
                }
            }
            return max;
        },
    }
    
    console.log(myMath.PI)
    console.log(myMath.max(1,2,3,10,5)) 10
    console.log(myMath.min(1,50,30,10,-50)) -50
</script>

#Math对象其他属性和方法

<script>
    绝对值
    var a = -1; -1的绝对值就是1
    console.log(Math.abs(-1))
    console.log(Math.abs(1))
    console.log(Math.abs(-50))
    console.log(Math.abs("50"))
    隐式转换的过程↑
    
    取整
    Math提供了三种的取整方式向上、向下、四舍五入
    
    向下取整
    var a = 2.1;
    console.log(Math.floor(a)) floor地板的意思
    
    向上取整
    var b = 3.1;
    console.log(Math.ceil(b)); ceil天花板的意思
    
    四舍五入
    console.log(Math.round(5.2)) round四舍五入的意思
    console.log(Math.round(5.6))
</script>

#Math取随机数

<script>
    random方法进行随机取值
    随机值的取值为 0 =< x < 1
    console.log(Math.random())
    
    ((0 - 1) * (100 - 10)) + 10 = 10 - 100
    console.log(Math.floor((Math.random() * (100 - 10)) + 10))
    
    封装成了一个函数
    function getRandom(min, max){
        return Math.floor((Math.random() * (max - min + 1)) + min)
    }
    
    随机点名
    var arr = ["张三","李四","王朝"]
    console.log(arr[getRandom(0,arr.length - 1)])
</script>

#猜数字

<script>
    function getRandom(max, min){
        return Math.floor(Math.random() * (max - min + 1) + min)
    }
    var randomNum = getRandom(1, 10);
    while(1){
        var num = prompt("请输入你输入的数字:(1 - 10之间)")
        if(num > randomNum){
            alert("您猜的数字大了")
        }else if(num < randomNum){
            alert("您猜的数字小了")
        }else{
            alert("您猜对了")
            break;
        }
    }
</script>

#Deta

<script>
    Date 是一个构造函数
    var date = new Date();
    var date = new Date(2020, 3, 18);
    var date = new Date("2020-03-18 10:12");
</script>

#Date对象上面的方法

<script>
     var date = new Date();
     
     获取到当前的年份
     console.log(date.getFullYear());
     
     获取到当前的月份 获取的值从0开始的
     console.log(date.getMonth() + 1);
     
     获取到日
     console.log(date.getDate());
     
     获取到星期几
     console.log(date.getDay());
     
     var year = date.getFullYear();
     var month = date.getMonth() + 1;
     var dates = date.getDate();
     var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五' ,'星期六']
     var day = arr[date.getDay()];
     console.log("今天的日期为", + year + "年" + month + "月" + dates + "日" + day)
</script>

#Date更精确的函数

<script>
    function getTimer(){
        var date = new Date();
            获得小时的时间
        var hours = date.getHours();
            获得分钟的时间
        var minutes = date.getMinutes();
            获得秒的时间
        var seconds = date.getSeconds();

        三元表达式
        hours = hours < 10 ? "0" + hours : hours
        minutes = minutes < 10 ? "0" + minutes : minutes
        seconds = seconds < 10 ? "0" + seconds : seconds
        return hours + ":" + minutes + ":" + seconds
    }
    console.log(getTimer())
</script>

#Date获取时间戳

    时间戳是什么
    是从1970年1月1日0点0分0秒到某一个时间点为止总毫秒数!!!
    var date = new Date();

    第一种获取时间戳的方式
    console.log(date.valueOf())

    第二种获取时间戳的方式
    console.log(date.getTime())
    毫秒比秒多出三位

    第三种获取时间戳的方式+new的方式
    console.log(+new Date())

    第四种获取时间戳的方式Date.now
    console.log(Date.now())

#倒计时

<script>
    倒计时
    初始化时间的时候注意
    2020-3-19 12:00:00
    function countDown(time){
        当前时间戳
        var nowTime = +new Date();
        未来时间戳
        var willtime = +new Date(time);
        时间戳偏移值,毫秒数 => 秒
        var offsetTime = (willtime - nowTime)/1000;

        var day = parseInt(offsetTime / 60 / 60 / 24); 天数
        var hours = parseInt(offsetTime / 60 / 60 % 24); 剩余小时数
        var minutes = parseInt(offsetTime / 60 % 60); 剩余的分钟数
        var seconds = parseInt(offsetTime % 60); 剩余的秒数
        return "剩余时间为:" + day + "天" + hours + "小时" + minutes + "分钟" + seconds + "秒"
    }
    console.log(countDown("2020-3-19 12:00:00"))
    </script>

#创建数组

<script>
    var arr = []

    var arr1 = new Array(2,3);
    console.log(arr1) // 输出数组为2 3
</script>

#翻转数组

<script>
    怎么判断一个变量是一个数组?
    一个变量是否是一个数组
    instancof
    使用arr instancof Array 原型链上的方法
    如果为ture就是数组,否则就不是数组
    第二种方式 Array.isArray
    Array是一个构造函数
    function reverse(arr) {
        if(Array.isArray(arr)){
            var newArr = [];
            for(i = arr.length - 1; i >= 0; i--){
                newArr[newArr.length] = arr[i]
            }
            return newArr
        }else{
            console.log("这不是一个数组,请传递数组")
        }
    }
    var arr = [1,2,3,3,5]
    console.log(reverse(arr))
</script>

#实例对象上方法

<script>
    var arr =[1,2,3,4];
    数组里面添加数据 5
    arr[arr.length] = 5;
    console.log(arr);

    数组里面有对应的方法 push 推的意思
    可以把数值推进数组里面
    push函数将10推到数组中去,并且返回arr的新长度
     推是吧数值推到数组的最后面
    arr.push(5);
    console.log(arr)
    console.log(arr.push(10))

    弹出pop
    arr.pop()
    console.log(arr)
    pop函数将10弹出去,并返回弹出去的值!!!
    pop弹出的是数组最后方的值
    console.log(arr.pop())

    unshift 压入的意思
    unshift压到数组中的最前面,并且返回数组的新长度
    console.log(arr.unshift(100))
    console.log(arr)

    shift弹出的意思
    shift弹出是将数组最前方的一个值弹出,并且返回被弹出的值
    console.log(arr.shift())
    console.log(arr)
    </script>

#筛选数据

<script>
    var arr = [20,30,24,10,8];
    筛选出大于10的数据
    var newArr = [];
    for(var i = 0; i < arr.length; i++){
        if(arr[i] > 10){
            newArr.push(arr[i])
        }
    }
    console.log(newArr)
    </script>

#数组排序

<script>
    反转数组
    reverse:反转的意思,可以将数组反转过来
    var arr = [10, 8, 2, 3, 4, 5];
    arr.reverse();
    console.log(arr);

    数组的排序
    sort:可以排序数组
    在函数中传递函数
    arr.sort(function(a,b){
        return a - b;
        如果需要从大到小可以让b - a;
        a - b是从小到大的排序
    });
    console.log(arr);
</script>

#获取数组中元素的索引值

<script>
    var arr = ["red", "yellow", "pink", "yellow", "red", "yellow"]
    想问yellow在数组中的索引下标是多少
    indexOf获取到数组中第一个为yellow的索引值
    console.log(arr.indexOf("yellow"))

    lastIndexOf获取到数组中最后一个为yellow的索引值
    console.log(arr.lastIndexOf("yellow"))
</script>

#数组去重

<script>
    var arr = ["a", "b", "c", "a", "d", "b"]
    function unique(arr){
        var newArr = [];
        for(var i = 0; i < arr.length; i++){
            indexOf如果返回值为-1,则不存在改索引
            if(newArr.indexOf(arr[i]) === -1){
                newArr.push(arr[i])
            }
        }
        return newArr
    }
    console.log(unique(arr))
    </script>

#数组转字符串

<script>
    var arr = [1,2,3,4];
    两种将数组转换为字符串的方式
    console.log(arr.toString())
    console.log(String(arr))

    使用join函数进行自定义分隔符
    console.log(arr.join("-"))
</script>

#字符串定义

<script>
    单引号和双引号没有区别
    var str = "helloworld!!!";
    console.log(str.length)

    var str1 = new String("helloworld!!!")
    console.log(str1)
</script>

#字符串具有不可变性

<script>
    var str = "helloworld";
    console.log(str[1])
    str[1] = "E" 虽然给赋值了,但是没有发生变化!!!
    这说明字符串具有不可变性!!
    str = "你好!!!"
    console.log(str)
</script>

#根据字符串返回位置

<script>
    var str = "helloworld!!!"
    知道第一个l在那一个位置
    indexOf
    console.log(str.indexOf("l"))
    console.log(str.indexOf("l",5))
    第二个参数是从索引值那个位置开始查找
</script>

#查询字符串中某个字符出现的次数

<script>
    var str = "awfawfwagfawd"
    需要查询出来 a 有几个
    var num = 0;
    indexOf如果没有这个字符,就会返回-1
    var index = str.indexOf("a")
    while(index !== -1){
        num++;
        index = str.indexOf("a",index + 1)
    }
    console.log("a出现的次数为", num)
</script>

#字符串其他方法

<script>
    var str = "您好"
    charAt是由位置求出字符串中的字符是什么
    console.log(str.charAt(1))
    for(var i = 0; i < str.length; i++){
        console.log(str.charAt(i))
    }

    charCodeAt是将字符转换为Ascii码
    ASCII是什么 编码 utf8 gbk gb2312 最常用的是utf8
    ASCII是英文编码
    var str = "helloworld"
    console.log(str.charCodeAt(str[0]))

    fromCharCode
    var num = 104;
    console.log(String.fromCharCode(num))
</script>

#统计出现最多的字符和次数

<script>
    var str = "aaasdsadsadsdsddsfassafg";
    var obj = {}
    for(var i = 0; i < str.length; i++){
        var char = str.charAt(i);
        if(obj[char]){
            如果这个字符重复出现每出现一次后面就加1
            obj[char]++;
        }else{
            如果字符串中的字符只出现一次后面显示1
            obj[char] = 1;
        }
    }
    console.log(obj);
    var max = 0;
    var ch = "";
    for(var key in obj){
        if(obj[key] > max){
            max = obj[key];
            ch = key;
        }
    }
    console.log("在字符串中字符最多的是" + ch + "出现次数为" + max)
</script>

#字符串合并和截取

<script>
    var str1 = "hello";
    var str2 = "world";

    连接字符串
    使用concat进行连接数组
    var str3 = str1.concat(str2)
    console.log(str3)

    截取字符串
    var str4 = "中国加油,武汉加油"
    substr截取字符串
    第一个参数是从索引号第几位开始
    第二个参数是截取几位字符串
    console.log(str4.substr(0, 4))
    如果第一个参数是负的那就是从最后面开始截取负3就是从最后面第3位开始截取
    console.log(str4.substr(-4, 2))

    字符串里面的字符进行替换
    " " => ""
    var str = "helloworld 改 革 春 风 吹 满 地"
    replace的第一个参数是要替换的字符,第二个是要替换成什么的字符
    while(str.indexOf(" ") !== -1){
        str = str.replace(" ","")
    }
    console.log(str)

    字符串怎么转换成数组
    使用split转换成数组
    var str = "red,pink,blue"
    console.log(str.split(","))
</script>