第六天-内置对象;数组、字符串对象及方法;简单类型和复杂类型

javascript中的对象分为三种:自定义对象、内置对象、浏览器对象(前两种对象是JS基础内容,属于ECMAScript;第三个浏览器对象属于JS独有)

  内置对象就是指JS语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是最基本而必要的功能(属性和方法)。内置对象最大的优点就是帮助我们快速开发,常见的内置对象有Math、Date、Array、String等

  通过查文档(MDN)学习对象中的方法:1.查看该方法的功能;2.查看里面参数的意义和类型;3.查看返回值的意义和类型;4.通过demo进行测试

  可以利用对象封装自己的内置对象

// 利用对象封装自己的内置对象
        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
            }
        }

        // 调用内置对象
        console.log(myMath.PI);
        console.log(myMath.max(1, 5, 9));

  常用Math:Math.floor()向下取整、ceil向上取整、round五舍六入、abs绝对值、random随机小数(大于等于0小于1)

// 得到两个数间的随机数,并包含这2个整数
        // Math.floor(Math.random() * (max - min + 1)) + min
        function getRandom(min, max) {
            return Math.floor(Math.random() * (max - min + 1)) + min
        }
        console.log(getRandom(1, 10));

        // 随机点名
        var arr = ['张三', '李四', '王五']
        console.log(arr[getRandom(0, arr.length-1)]);

   Date对象是构造函数,必须实例化之后使用,用来处理日期和时间

    Date对象基于1970年1月1日(世界标准时间)起的毫秒数

var date = new Date()
        // 获取当年
        console.log(date.getFullYear());
        // 获取当月,从0开始
        console.log(date.getMonth()+1);
        // 当天日期
        console.log(date.getDate());
        // 星期几,周日0到周六6
        console.log(date.getDay());
        // 当前小时
        console.log(date.getHours());
        // 当前分钟
        console.log(date.getMinutes());
        // 当前秒钟
        console.log(date.getSeconds());

    倒计时

// 倒计时
        function countDown(time) {
            // 返回的是当前时间的总毫秒数
            var nowTime = +new Date()
            // 返回的是用户输入时间的总毫秒数
            var inputTime = +new Date(time)
            // 剩余时间的总秒数
            var times = (nowTime - inputTime) / 1000
            //
            var d = parseInt(times / 60 / 60 / 24)
            d = d < 10 ? '0' + d : d
            //
            var h = parseInt(times / 60 / 60 % 24)
            h = h < 10 ? '0' + h : h
            //
            var m = parseInt(times / 60 % 60)
            m = m < 10 ? '0' + m : m
            //
            var s = parseInt(times % 60)
            s = s < 10 ? '0' + s : s
            return d + '天' + h + '时' + m + '分' + s + '秒'
        }

        console.log(countDown('2019-5-1 18:00:00'));

  数组对象

    push末尾添加返回新的长度、

    pop末尾弹出返回删除元素的值、

    unshift开头添加返回新的长度、

    shift开头删除返回第一个元素的值、

    reverse翻转数组

    sort排序数组(冒泡)

var arr = [564, 5644, 84, 564, 864]
        arr.sort(function(a, b) {
            // 升序
            // return a - b
            // 降序
            return b - a
        })
        console.log(arr);

    indexOf查找给定元素的第一个索引,找不到返回-1;用来数组去重

    lastIndexOf查找给定元素在数组中的最后一个索引,找不到返回-1;用来数组去重

    toString把数组转为字符串,逗号分隔每一项

    join('分隔符')把数组中所有元素转换为一个字符串,可单独设置分隔符

    concat连接两个或多个数组,返回一个新数组,不影响原数组

    slice截取slice(begin, end),返回被截取的新数组

    splice数组删除splice(第几个开始, 要删除个数),返回被删除项目的新数组,这个方法会影响原数组

 

字符串对象

  为了方便操作基本数据类型,javascript还提供了三个特殊的引用类型:String、Number和Boolean

  基本包装类型:把简单数据类型包装成复杂数据类型,这样基本数据类型就有了属性和方法

  基本数据类型是没有属性和方法的,而对象才有属性和方法,但是下面却可以执行,这是因为js会把基本数据类型包装为复杂数据类型

var str = 'andy'
        console.log(str.length);

  基本数据类型包装为复杂数据类型,执行过程如下

// 1.生成临时变量,把简单数据类型包装为复杂数据类型
        var temp = new String('andy')
        // 2.赋值给声明的字符变量
        str = temp
        // 3.销毁临时变量
        temp = null

  字符串的不可变指的是里面的值不可变,虽然看上去可以改变内容,但实际是地址变了,内存中新开辟了一个内存空间。因为字符串的不可变所以不要大量的拼接字符串

  字符串的所有方法,都不会修改字符串本身(因为字符串本身是不可变的),操作完成会返回一个新的字符串

    indexOf('要查找的字符',开始的位置),返回指定内容在原字符串中的位置,找不到就返回-1

    lastIndexOf(),从后往前找,只找第一个匹配的

    charAt(index),返回指定位置的字符

    charCodeAt(index),获取指定位置字符处的ASCII码

    str[index],获取指定位置处的字符

// 统计出现次数最多的字符和次数
        var str = 'adnbebcebvevberi'
        var o = {}
        for( var i = 0; i < str.length; i++) {
            var chars = str.charAt(i)
            if(o[chars]) {
                o[chars]++
                console.log(o[chars]);
            }else {
                o[chars] = 1
            }
        }
        console.log(o);

    concat方法用于连接两个或多个字符串,+更常用

    substr(start, length)从start开始,length取的个数

    slice(start, end)从start开始截取到end位置,end取不到

    substring(start, end)从start开始截取到end位置,end取不到,和slice基本相同,但是不接受负值

    replace('被替换的字符', ’替换为的字符')

    split('分隔符')字符转换为数组

    toUppercase转换大写

    toLowercase转换小写

数据类型

  简单类型和复杂类型

    值类型:简单数据类型/基本数据类型,在存储时变量中存储的是值本身

      string、number、boolean、undefined、null

    引用类型:复杂数据类型,在存储时变量中存储的仅仅是地址(引用)

      通过new关键字创建的对象(系统对象、自定义对象),如Object、Array、Date等

    栈:简单数据类型存放到栈里面,直接开辟一个空间存放值

    堆:复杂数据类型存放到堆里面,首先在栈里面存放地址,十六进制表示,然后这个地址指向堆里面的数据

    函数的形参也可以看作是一个变量,当把一个值类型变量作为参数传给函数的形参时,其实是把变量在栈空间里面的值复制了一份给形参,那么在方法内部对形参做任何修改,都不会影响到外部变量

    当把一个引用类型变量传给形参时,其实是把变量在栈空间里保存的堆地址复制给了形参,形参和实参其实保存的是同一个堆地址,所以操作的是同一个对象

 

function Person(name) {
            this.name = name
        }
        function f1(x) {
            console.log(x.name);
            x.name = "张学友"
            console.log(x.name);
        }

        var p = new Person("刘德华")
        console.log(p.name);
        f1(p)
        // 输出?
        console.log(p.name);

 

posted @ 2020-11-16 17:29  ajjoker  阅读(83)  评论(0)    收藏  举报