Math

256 阅读6分钟

1-Math

    Math对象是一个数学对象,不是一个构造函数。
    构造函数实例化对象是使用new的方式!!! 
01-Math.PI
    取π值
    console.log(Math.PI); // 3.1415926...
02-Math.max
    取出最大值
    console.log(Math.max(1, 100, 20)) // 100
    console.log(Math.max(-1, -100)); // -1
    有字符串时打印出 -Infinity
    console.log(Math.max(1, 100, "你好")) // -Infinity
    没有内容时打印出 NaN
    console.log(Math.max()) // NaN
03-Math.min
 取最小值
    console.log(Math.min(10, 20, 1)) //1
以上三个可以用对象表示出来
 var mymath = {
        PI: 3.1415926,
        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 min = arguments[0];
            for( var i = 1 ; i < arguments.length ; i++ ){
                if( arguments[i] < min){
                    min = arguments[i]
                }
            }
            return min;
        }
    }
    console.log(mymath.max(5,6,8,7,9)) // 9
    console.log(mymath.min(5,6,8,7,9)) // 5
04-Math.abs
   取绝对值
    console.log(Math.abs(1)) // 1
    console.log(Math.abs(-1)) // 1
    console.log(Math.abs('red')) // NaN
    当值为字符串的数字时会隐式转换为数字
    console.log(Math.abs("-1"))  // 1
05-Math.floor
 向下取整数
   console.log(Math.floor(2.1)) // 2
06-Math.ceil
 向上取整数
   console.log(Math.floor(3.1)) // 4
07-Math.ceil
 四舍五入
   console.log(Math.round(2.6))  // 3
08-Math.random
 取随机数
  console.log(Math.random()) // 随机值的取值为 0 =< x < 1
  console.log(Math.random() * (100 )) // 随机值的取值为 0 =< x < 100
  console.log(Math.floor((Math.random() * (100 - 10)) + 10)) / 随机值的取值为 10 =< x < 100
  
  例1:
  function sum(min , max){
    console.log(Math.ceil( Math.random() * (max - min +1) + min - 1))
 }
 console.log( sum( 50 , 60))
 50-60取随机数
 
 例2:
   function sum(min , max){
        return Math.floor(Math.random()*(max - min + 1) + min)
    }
    var num1 = getRandom(1,10)
    while(1) {
        var num = prompt("请输入您猜想的数字: (1-10之间)")
        if(num > randomNum) {
            alert("您猜的数字大了")
        }else if(num < randomNum) {
            alert("您猜的数字小了")
        }else {
            alert("猜对了")
            break;
        }
    }

2-Date

 Date 是一个构造函数
    var date = new Date();
      获取到当前的年份
    console.log(date.getFullYear())  
      获取当前的月份。 获取的值从0开始 所以加一
    console.log(date.getMonth() + 1)
      获取到日
    console.log(date.getDate());
      获取到星期几
    console.log(date.getDay())
      获取到国际时间
     console.log(date)
      获取到小时
    console.log(date.getHours())
      获取到分钟
    console.log(date.getMinutes())
      获取到秒
    console.log(date.getSeconds())
    
    例:
     把 8:5:3 => 08:05:03
    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
        if(hours < 10) {
            hours = '0' + hours
        }
        if (minutes < 10) {
            minutes = '0' + minutes
        }
        if (seconds < 10) {
            seconds = '0' + seconds
        }
    }
    console.log(getTimer())

Date时间戳

   时间戳是从1970年1月1日0:0:0 到某一点时间点位置的总毫秒数!!!

获取时间戳方式

 var date = new Date();
     1.获取时间戳方式1
    console.log(date.valueOf())
     2.获取时间戳方式2
    console.log(date.getTime())
     3.使用+new获取 这个+相当于调用valueof
    console.log(+new Date())
     4.Date.now()
    console.log(Date.now())
    
    例:
    function djs(time){
 var djsj = +new Date()
 var wlsj = +new Date(time)
 var caz = (wlsj - djsj) / 1000
 var day = parseInt(caz / 60 /60 / 24 )
 var hous = parseInt(caz /60 /60 % 24)
 var fen = parseInt(caz / 60 % 60)
 var miao= parseInt(caz % 60)
 return "剩余时间为:" + day + "天"+ hous  + "小时" + fen + "分钟" + miao + "秒";
 }
 console.log(djs( "2020-3-19 12:00:00"))

3-数组

01- 怎么判断一个变量是一个数组?

    1.arr instancof Array, 
    true就是数组,如果不为true就不是数组
    
    2.Array.isArray
    Array是一个构造函数

02-数组修改

  var arr = [1, 2, 3];
1.push函数
  将10推到数组中去,并且返回arr的新长度 ,放到最后面
    console.log(arr.push(10))
2. pop 弹出
  将10 弹出去, 并且返回弹出去的值!!!弹出去最后面的值
    console.log(arr.pop(10))
3.unshift 压入
     将100压到数组中的最前面,并且返回数组的新长度
    console.log(arr.unshift(100))
4.shift 弹出
     shift 函数将100 弹出去, 并且返回弹出去的值!!! 弹出去最前面的值
    console.log(arr.shift())
 例:
    筛选出来大于10的数据
  var arr = [20, 30, 24, 10, 8];
    var newArr = []
    for(var i = 0; i < arr.length; i++) {
        if(arr[i] > 10) {
            newArr.push(arr[i])
        }
    }
    console.log(newArr)
5. reverse 反转
   var arr = [10, 8, 2, 3, 4, 5];
   console.log( arr.reverse())
6. 数组的排序
     在函数中传递函数。
    arr.sort(function(a, b) {
        return b - a; 倒序
        return a - b; 正序
    });
    console.log(arr)
7.获取数组中元素的索引值
    var arr = ["red", "yellow", "pink", "yellow"]
     01-indexOf 获取到数组中第一个为yellow的索引值!!!
    console.log(arr.indexOf("yellow")) // 索引下标是// 1
   02- lastIndexOf 获取到数组中最后一个为yellow的索引值
    console.log(arr.lastIndexOf("yellow"))
    例:
    数组去重
     把数组中的每一项都取出来,
     每取一个值,就要和新数组中进行对比,看是否有了这个字符,如果没有直接压入,如果有则抛弃
    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))
7.数组转字符串
 var arr = [1, 2, 3, 4];
   1. console.log(arr.toString())
   2. console.log(String(arr))
   使用join函数进行自定义分隔符
   console.log(arr.join("&"))  // 1&2&3&4

字符串

 单引号和双引号没有区别!!!
    var str = "helloworld!!!";
    console.log(str)
1.不可变性
   var str = "helloworld";
    console.log(str[1])
    str[1] = "E" // 虽然给赋值了,但是没有发生变化!!!
    // 字符串具有不可变性!!
    str = "你好!!!"
    console.log(str)
    整体是可以改变的
2.根据字符返回位置
     var str = "helloworld!!!";
     使用 indexOf
     可以知道第一个l在哪一个位置!!!
    console.log(str.indexOf('l'))
    console.log(str.indexOf('l', 4))
     第二个参数是从索引值为4的位置开始查找!!!
3.查询字符串中某个字符出现的次数
 查询出来 a 有多少个 
     var str = "abddadadffretrtysdfgadadsfs";
      var num = 0;
    var index = str.indexOf("a");   // indexOf如果没有这个字符,就会返回-1
    while(index !== -1) {          // 每一次循环必然会找到一个a.
        num++;
        index = str.indexOf('a', index + 1)
    }
    console.log("a出现的次数为", num)
4.由位置求出字符串中的字符
     var str = "你好发不发出"
      console.log(str.charAt(1)) 
    for(var i = 0; i < str.length; i++) {
        console.log(str.charAt(i))
    }
 注意:
 charCodeAt是将字符转换成Ascii
    var str = "helloworld"
    console.log(str.charCodeAt(str[0])) // 这里将 h 转化为 104
    
     formCharCode是将Ascii转换成字符
    var num = 104;
    console.log(String.fromCharCode(num)) // h
5.统计出来一个字符串中出现次数最多的字符,并且打印出来出现了几次!!!
  var str = "aaadddvdfsaffgfddvxfhgdfgfdgg";
    var obj = {}
    for(var i = 0; i < str.length; i++) {
        var char = str.charAt(i);
        if(obj[char]) {
            // obj['a']++ = 2
            obj[char]++;
        }else {
            // obj['a'] =  1
            obj[char] = 1;
        }
    }
    var max = 0;
    var ch = '';
    for(var key in obj) {
        if(obj[key] > max) {
            max = obj[key]
            ch = key;
        }
    }
    console.log("在字符串中字符出现最多的是:"+ch+";出现了"+max+"次")
6.字符串合并和截取
    var str1 = "hello"
    var str2 = "world"
  01-使用concat进行连接字符串
    var str3 = str1.concat(str2)
    console.log(str3)
    
  02-截取字符串
    var str4 = "中国加油,武汉加油"
    // substr截取字符串
    // 第一个参数为从索引号为0 开始
    // 第二个参数取几个字符
    // -1是在最后一个位置
    console.log(str4.substr(-3, 2)) //  汉加
    
    
    
    03- 字符串里面的字符进行替换
    将 " " => ""
    var str = "helloworld 改 革 春 风 吹 满 地 ";
    // helloworld改 革 春 风 吹 满 地
    // helloworld改革 春 风 吹 满 地 
    // helloworld改革春 风 吹 满 地 
    因为每次只能替换一个,所以可以用循环
    while(str.indexOf(" ") !== -1) {
        str = str.replace(" ", "")
    }
    console.log(str)
    
    
    04-字符串转换成数组
     使用split转换成数组
    var str = "red,pink,blue"
    console.log(str.split(","))