2021-12-05

JS内置对象的Math属性

概念:Math是一个内置对象,它拥有一些数学常数属性和数学函数方法,它不是一个函数对象,所以不需要  new来调用 

1.Math.ramdom

作用:返回一个0-1之间的随机数

语法:consolo.log(Math.ramdom()) 

例如:生成一个1000到2000之间的随机数

consolo.log(Math.ramdom()*1001+1000) 

2.Math.PI

作用:返回圆周率

语法:consolo.log(Math.PI())     返回3.1415926

3.Math.max   Math.min

作用:返回一组数据中的最大值和最小值

语法:consolo.log(Math.max(1,2,3))返回3     consolo.log(Math.min(1,2,3)) 返回1

4. Math.abs

作用:返回绝对值

语法:consolo.log(Math.abs(-1)) 返回1 

如果consolo.log(Math.abs('-1')) 字符串也会返回1

5.Math.floor     Math.ceil

作用:向下取整   向上取整

语法: consolo.log(Math.floor(1.1))    consolo.log(Math.floor(1.9))  都返回1 

consolo.log(Math.floor(1.1))    consolo.log(Math.floor(1.9))  都返回2

6.Math.round

作用:四舍五入

语法:consolo.log(Math.round(1.1))  返回1  consolo.log(Math.round(1.9)) 返回2

7.Math.pow

作用:次幂

语法:consolo.log(Math.pow(2,2))   返回2的2次方  4

8.Math.sqrt 

作用:开平方根

语法:consolo.log(Math.sqrt(25))   返回5


Js内置对象之Date属性 

内置对象Date,是一个构造函数,必须用new 调用

例如:

1. let date = new Date(); 

     console.log(date);  //不写参数就是返回系统当前日期

2.let date = new Date('2021-11-15');

 console.log(date); 

属性:

一、getXXX() 方法  get方法用于获取当前时间

let date=new Date()

 1. getFullYear  

 console.log (date.getFullYear( ) ) 返回当前年份

 2. getMonth

console.log('月份:' + (date.getMonth ( ) + 1)); 返回当前月份  一定要+1 它是从0开始

 3. getDate  

console.log( date.getDate( ) );返回当前几号

4.getDay    

console.log(date.getDay( ) );返回当前周几   0是周日  0-6

5.getHours

console.log(date.getHours( ) ); 返回当前小时

6.getMinutes

console.log(date.getMinutes( ) ); 返回当前分钟

7.getSeconds 

console.log(date.getSeconds( ) );返回当前秒数

8.getMilliseconds  

console.log(date.getMilliseconds( ) );  返回当前毫秒数

二、setXXX()方法  用于修改日期, 语法格式与get一样

三、时间戳

获取的毫秒总数是距离 1970年1月1日开始算  

1. 通过 valueOf() 和 getTime()获取毫秒数

let date = new Date();

console.log(date.valueOf( ) ); 

console.log(date.getTime( ) );

 2.简单写法    +new Date()

let date = +new Date();    new Date前面加个 +号

console.log(date);

 3.H5新增的 获得总的毫秒数  低版本不支持

console.log(Date.now());

四、时间运算

两个时间可以进行加减法运算

例如: 

let d1 = new Date('1992/5/28')  注意:此处格式没有明确要求 ,用'-' '@' '#' '*' 皆可

let d2 = new Date()

let time = d2 - d1   可以直接进行减法运算

console.log(time);   获取到毫秒数,再进行转换即可

console.log('秒数:' + Math.floor(num / 1000));  返回秒数

console.log('分钟:' + Math.floor(num / 1000 / 60));  返回分钟

console.log('小时:' + Math.floor(num / 1000 / 60 / 60)); 返回小时

console.log('天数:' + Math.floor(num / 1000 / 60 / 60 / 24));  返回天数

五、星期几汉化处理

用getDay获取到的周几是阿拉伯数字,一般我们写星期几都是大写,例如:星期三而不是星期3

解决办法:

如果要用汉字,加一个数组

let arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];

let day = date.getDay(); 获取到周几就是数组的索引号

console.log(`今天是${year}年${month}月${dates}日,${arr[day]}`); 直接索引即可


箭头函数

ES6推出了定义函数的简写方式:箭头函数

1.在箭头函数中,如果方法体只有一条语句,可以省略大括号{}

2.在箭头函数中,如果方法只有一个参数,可以省略小括号()

3.在箭头函数中,如果方法体只有一条语句,并该语句是返回语句,那么在省略{}的同时,必须省略return关键字

例如:

let fn4 = (num1, num2) => num1 + num2

    console.log(fn4(100, 200));

let fn5 = (num1, num2) => console.log(`${num1}+${num2}=${num1 + num2}`);

    fn5(100, 200)

let fn6 = num => console.log(num * 3);

    fn6(100)

 let fn7 = () => console.log('我是箭头函数');

    fn7(100)

例如:

1.判断是否是闰年的箭头函数:

let isLeapYear = (year) => (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;

2.对个位数字补零的方法

let repair0 = (val) => (val < 10 ? "0" + val : val);

3.对字符串反转的方法

let reverseStr = (str) => str.split('').reverse().join('');

4. 返回一个日期的两种格式格式方法

    let miniDate = (date, type) => {

    let year = date.getFullYear(); //年

    let month = date.getMonth() + 1; //月

    let day = date.getDate(); //日

    let hour = date.getHours(); //时

    let minute = date.getMinutes(); //分

    let second = date.getSeconds(); //秒

    let week = date.getDay(); //周几

    //定义一个返回值,默认拼接:年,月,日

    let ret = [repair0(year), repair0(month), repair0(day)].join("-");

    if (type == "1") {

        ret += " " + [repair0(hour), repair0(minute), repair0(second)].join(":");

    } else if (type == "2") {

        ret +=

            " " + [repair0(hour), repair0(minute), repair0(second)].join(":") +

            " 星期" +

            "日一二三四五六" [week];

    }

    return ret ; };


值类型

值类型:

简单(一般)数据类型:

字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol

引用(复杂)数据类型:

对象(Object)、数组(Array)、函数(Function),

数据类型不同,那么浏览器对其内部操作也就不大相同,尤其是对于复杂数据类型而言,很有可能造成一些不必要的麻烦,变量的值如果是一般数据类型的话,浏览器会把这个值存放到【栈】中,如果是复杂数据类型将会在【堆】中开辟一个新的空间用于单独存放,其中的【栈】和【堆】是一种概念,相当于内存中某处存放数据的地方,对于【栈】,是有一定大小空间的,如果这个数据过于庞大,比如一些数位高的惊人的数据,在处理上也会造成延误或者滞留。

比如:

let a = 100,   let b = a ,那么b的结果也将等于100

let a = { name : '王二麻子' }  ,  let b = a ,由于此时两个变量都是指向一个值,而由于对象的值是存放在【堆】里面的,【堆】会将数据的位置生成一串内部地址存放在【栈】里,a和b都指向这个地址,则此时 b的结果也将会是 { name:'王二麻子'}  ,但如果此时赋值 b = { name : '路人甲' },则由于更改的是同一内存地址内的值,则这个值也会影响a的取值,此时的a也会等于 { name : '路人甲' }


闭包函数和回调函数

回调函数概念:    函数的参数callback是另一个参数,这个参数在原始数据中执行

例如:

  let arr = [11, 22, 33, 44, 55, 66, 77, 88, 99]

    function liFor(arr, callback) {

        for (let i = 0; i < arr.length; i++) {

            if (callback(arr[i])) {

                console.log(arr[i]);

            }

        }

    }

    console.log('---------遍历数组----------');

    liFor(arr, val => true)

    console.log('---------输出奇数----------');

    liFor(arr, val => val % 2 !== 0)

    console.log('---------输出被3整除----------');

    liFor(arr, val => val % 3 === 0)

    console.log('---------输出被3和6整除----------');

    liFor(arr, val => val % 3 === 0 && val % 6 === 0)

闭包函数概念:定义一个a方法,在a方法中定义一个b方法,并且b方法里面用到了a方法里面定义的变量,那么此时就形成了闭包函数,由于内部方法里面,用到外部方法里面的变量,外部方法里面的那个变量会一直在内存中存保存着。两个方法嵌套定义,里面的方法,用到了外面方法里面定义的变量,此时这两个方法就形成了闭包。

例如:

function a() {

            console.log('a函数被调用了...');

            let num1 = 100

            let num2 = 200

            function b() {

                console.log('b函数被调用了...');

                console.log(num1 + num2);

            }

            //返回的返回值也是一个函数,那么a函数就是高阶函数。

            return b

        }




        // 通常情况下,函数执行完成后,函数里面定义的变量,会被销毁。

        // a函数,已经调用完毕了,但是a函数里面定义变量,始终在内存中,因为b函数中用到了a函数中定义的变量。

        // 那么此时这两个函数,就称之为:闭包函数。

        let c = a()

        c()

        console.log('------------------------------------------');

        // 闭包函数的实际案例

        function calc(num1, num2, type) {

            switch (type) {

                case '+':

                    console.log(`${num1}+${num2}=${num1 + num2}`);

                    break;

                case '-':

                    console.log(`${num1}-${num2}=${num1 - num2}`);

                    break;

            }

        }

        // 在实际开发中,我们在做num1和num2的计算之前,可能需要先做其他事情

        let num1 = 100

        let num2 = 50

            // 在做其他事情的过程中,我们的数据很有可能会被篡改。

        console.log('查看用户是否登录');

        num1 = 555

        num2 = 145

        console.log('检查用户的权限');

        calc(num1, num2, '+') //运行结果不对,因为变量的值被篡改了。

        console.log('------------------------------------------');

        // 定义一个闭包函数,实现计算器功能

        function myCalc(num1, num2, type) {

            switch (type) {

                case '+':

                    return function() {

                        return num1 + num2

                    }

                case '-':

                    return function() {

                        return num1 - num2

                    }

            }

        }


        //先准备好你的数据

        let n1 = 100

        let n2 = 50

            //将你的数据传给计算器方法,由计算器方法,返回一个计算方法。

        let js = myCalc(n1, n2, '+')

            //在做具体的计算之前,还先做些其他的事情

        console.log('查看用户是否登录');

        n1 = 555

        n2 = 145

        console.log('检查用户的权限');

        //其他事件准备好了后,执行计算方法

简单来说就是:先将一段数据储存起来,等到需要用的是时候再调用即可。  目的就是为了其存储的的数据不会被篡改。 提高了安全性。


分页方法

let arr = [ ];

        for (let i = 0; i < 100; i++) {

            arr.push('数据' + (i + 1))

        }

        console.log(arr);

        //定义一个分页方法,方法的三个参数分别是:原始数据,页码,每页数量

        function pageDate(arr, pageIndex, pageSize) {

            //思路就是对原始数据进行截取

            let start = (pageIndex - 1) * pageSize //第三页下标就是pageIndex - 1,然后乘以后面要显示多少数据     算出开始截取的位置的下标,下标20就是数据21

                // 定义截取的结束位置

            let end = start + pageSize //结束位置就是 20+10=30,取不到下标30的数据31  

            return {

                //定义返回的数据

                date: arr.slice(start, end),

                //总数量

                count: arr.length,

                //总页数  向上取整

                totalPage: Math.ceil(arr.length / pageSize),

                pageIndex: pageIndex,

                pageSize: pageSize,

            }

        }

        let arr2 = pageDate(arr, 3, 10)

        console.log(arr2); //最后截取的就是数据21-30


对象

// 对象就是拥有一组属性和方法的集合

        // 如果 a.b ,那么a就是对象,b是a的属性

        // 如果 a.c(),那么a就是对象,c是a的方法

        // 定义对象的第一种方式:采用字面量赋值方式直接定义

        let stu1 = {

            //属性名:属性值的方式,定义属性

            no:1001,

            name:'张三',

            age:20,

            sex:'男',

            //定义学生的方法

            study:function(){

                console.log('每天学习8小时');

            },

            play:function(){

                console.log('每天玩8小时');

            }

        }

        console.log(stu1);

        //调用对象身上的属性

        console.log(stu1.name);

        console.log(stu1.age);

        //调用对象身上的方法

        stu1.study()

        stu1.play()

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,753评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,668评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,090评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,010评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,054评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,806评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,484评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,380评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,873评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,021评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,158评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,838评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,499评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,044评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,159评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,449评论 3 374
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,136评论 2 356

推荐阅读更多精彩内容

  • 八、初识函数 1.定义 function 是定义函数的关键字,函数也称为方法 。 函数分为:1.无参函数 2.带...
    默默_01cf阅读 281评论 0 0
  • 一,JavaScript的书写格式 1.行内脚本:写在HTML标签内部,通过一个属性节点来添加,不推荐使用,例如“...
    刘远舟阅读 462评论 0 0
  • 函数,也称之为方法,是完成某个功能的代码块 function 是定义函数的关键字 函数分为:1.无参函数 2.带参...
    kygo阅读 309评论 0 1
  • ECMAscript 基础语法 变量 数据类型 运算符 数组 函数 对象 BOM 浏览器对象模型 window对象...
    浅笑_阅读 221评论 0 0
  • 文初先补充两点,数组的排序方式.sort(),括号里面可传函数参数,针对数组里的数据为数字型时,升序的传递函数为f...
    青木樹海阅读 199评论 0 0