JavaScript对象

目录

对象

创建对象的三种方式

利用字面量创建对象

对象的调用

 变量,属性,函数,方法的区别:

 利用new Object创建对象

利用构造函数创建对象

构造函数和对象

new关键字

 遍历对象属性

内置对象

内置对象

查阅文档(MDN)

Math()对象

封装自己的数学对象

Math绝对值和三个取整方法

生成随机数方法

猜数字游戏案例

Date对象

日期格式化

格式化日期 年月日

格式化时分秒

获取日期的总的毫秒形式

京东倒计时案例

数组对象Array

创建数组方式

检测是否数组的方式

添加、删除数组元素

push在我们数组的末尾 添加一个或者多个数组元素

unshift在我们数组的开头 添加一个或者多个数组元素

pop可以删除数组的最后一个元素

shift() 它可以删除数组的第一个元素

筛选数组案例

数组排序

翻转数组 arr.reverse();

数组排序arr.sort();

数组索引方法

indexof();

lastIndexOf();

数组去重案例

数组转换为字符串

arr.tostring(默认逗号分隔)

arr.join();(括号里面可以添加自定义分隔符)arr.join('-');arr.join('&');

数组分割

字符串对象

根据字符返回位置

返回字符位置案例

根据位置返回字符

字符串操作

简单数据类型和复杂数据类型


对象

万物皆对象,对象是 一个具体的事物 在 JavaScript 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、 函数等。 分为自定义对象、内置对象、浏览器对象。
对象是由 属性 方法 组成的。
  • 属性:事物的特征,在对象中用属性来表示(常用名词)
  • 方法:事物的行为,在对象中用方法来表示(常用动词)

创建对象的三种方式

在 JavaScript 中,现阶段我们可以采用三种方式创建对象(object):
  • 利用字面量创建对象
  • 利用 new Object 创建对象
  • 利用构造函数创建对象

利用字面量创建对象

对象字面量:就是花括号{}里面包含了表达这个具体事物(对象)的属性和方法。

{}里面采取键值对的形式表示

键:相当于属性名

值:相当于属性值,可以是任意类型的值(数字类型、字符串类型、布尔类型、函数类型等)

var star = {
name : 'pink',
age : 18,
sex : '男',
sayHi : function(){
alert('大家好啊~');
}
};

 案例

        // 1.利用对象字面量创建对象 {}
        // var obj = {};  // 创建了一个空的对象 
        var obj = {
                uname: '张三疯',
                age: 18,
                sex: '男',
                sayHi: function() {
                    console.log('hi~');
                    // return 123;

                }
            }
            // (1) 里面的属性或者方法我们采取键值对的形式  键 属性名 : 值  属性值 
            // (2) 多个属性或者方法中间用逗号隔开的
            // (3) 方法冒号后面跟的是一个匿名函数
            // 2. 使用对象
            // (1). 调用对象的属性 我们采取 对象名.属性名 . 我们理解为 的
        // console.log(obj.uname);
        // (2). 调用属性还有一种方法 对象名['属性名']
        // console.log(obj['age']);
        // (3) 调用对象的方法 sayHi   对象名.方法名() 千万别忘记添加小括号
       console.log( obj.sayHi());

对象的调用

  •  对象里面的属性调用 : 对象.属性名 ,这个小点 . 就理解为“
  •  对象里面属性的另一种调用方式 : 对象[‘属性名’]注意方括号里面的属性必须加引号,我们后面会用
  •  对象里面的方法调用:对象.方法名() 注意这个方法名字后面一定加括号
console.log(star.name) // 调用名字属性
console.log(star['name']) // 调用名字属性
star.sayHi(); // 调用 sayHi 方法,注意,一定不要忘记带后面的括号

 变量,属性,函数,方法的区别:

        var num = 10;
        var obj = {
            age: 18,
            fn: function() {

            }
        }

        function fn() {

        }
        console.log(obj.age);
      

 利用new Object创建对象

 <script>
        // 利用 new Object 创建对象
        var obj = new Object(); // 创建了一个空的对象
        obj.uname = '张三疯';
        obj.age = 18;
        obj.sex = '男';
        obj.sayHi = function() {
                console.log('hi~');

            }
            // (1) 我们是利用 等号 = 赋值的方法 添加对象的属性和方法
            // (2) 每个属性和方法之间用 分号结束
        console.log(obj.uname);
        console.log(obj['sex']);
        obj.sayHi();
    </script>

利用构造函数创建对象

构造函数 : 是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与 new 运算符一起 使用。我们可以 把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面 。 在 js 中,使用构造函数要时要注意以下两点:
  • 构造函数用于创建某一类对象,其首字母要大写
  • 构造函数要和 new 一起使用才有意义

为什么?

    <script>
        // 我们为什么需要使用构造函数
        // 就是因我们前面两种创建对象的方式一次只能创建一个对象
        var ldh = {
            uname: '刘德华',
            age: 55,
            sing: function() {
                console.log('冰雨');

            }
        }
        var zxy = {
                uname: '张学友',
                age: 58,
                sing: function() {
                    console.log('李香兰');

                }
            }
            // 因为我们一次创建一个对象,里面很多的属性和方法是大量相同的 我们只能复制 
            // 因此我们可以利用函数的方法 重复这些相同的代码 我们就把这个函数称为 构造函数
            // 又因为这个函数不一样,里面封装的不是普通代码,而是 对象  
            // 构造函数 就是把我们对象里面一些相同的属性和方法抽象出来封装到函数里面
    </script>

怎么做?

     <script>
        // 利用构造函数创建对象
        // 我们需要创建四大天王的对象  相同的属性: 名字 年龄 性别  相同的方法: 唱歌
        // 构造函数的语法格式
        // function 构造函数名() {
        //     this.属性 = 值;
        //     this.方法 = function() {}
        // }
        // new 构造函数名();
        function Star(uname, age, sex) {
            this.name = uname;
            this.age = age;
            this.sex = sex;
            this.sing = function(sang) {
                console.log(sang);
            }
        }
        var ldh = new Star('刘德华', 18, '男'); // 调用函数返回的是一个对象
        // console.log(typeof ldh);
        console.log(ldh.name);
        console.log(ldh['sex']);
        ldh.sing('冰雨');
        var zxy = new Star('张学友', 19, '男');
        console.log(zxy.name);
        console.log(zxy.age);
        zxy.sing('李香兰');

        // 1. 构造函数名字首字母要大写
        // 2. 我们构造函数不需要return 就可以返回结果
        // 3. 我们调用构造函数 必须使用 new
        // 4. 我们只要new Star() 调用函数就创建一个对象 ldh  {}
        // 5. 我们的属性和方法前面必须添加 this
    </script>

构造函数和对象

  • 构造函数,如 Star(),抽象了对象的公共部分,封装到了函数里面,它泛指某一大类(class)
  • 创建对象,如 new Star(),特指某一个,通过 new 关键字创建对象的过程我们也称为对象实例化

new关键字

 遍历对象属性

采用 for in用于对数组或者对象的属性进行循环操作

    <script>
        // 遍历对象 
        var obj = {
            name: 'pink老师',
            age: 18,
            sex: '男',
            fn: function () { }
        }
        // for (变量 in 对象) {

        // }
        for (var k in obj) {
            console.log(k); // k 变量 输出  得到的是 属性名
            console.log(obj[k]); // obj[k] 得到是 属性值

        }
        // 我们使用 for in 里面的变量 我们喜欢写 k  或者  key
    </script>

内置对象

内置对象

        JavaScript 中的对象分为3种:自定义对象 、内置对象、 浏览器对象

        前面两种对象是JS 基础 内容,属于 ECMAScript; 第三个浏览器对象属于 JS 独有的, JS API 讲解内置对象就是指 JS 语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是最基本而必要的功能(属性和方法),内置对象最大的优点就是帮助我们快速开发

        JavaScript 提供了多个内置对象:Math、 Date 、Array、String等

查阅文档(MDN)

        查找文档:学习一个内置对象的使用,只要学会其常用成员的使用即可,我们可以通过查文档学习,可以通过MDN/W3C来查询。​

        Mozilla 开发者网络(MDN)提供了有关开放网络技术(Open Web)的信息,包括 HTML、CSS 和万维网及 HTML5 应用的 API。​

        MDN:MDN Web Docs

Math()对象

        Math 对象不是构造函数,它具有数学常数和函数的属性和方法。跟数学相关的运算(求绝对值,取整、最大值等)可以使用 Math 中的成员 。

 注意:上面的方法使用时必须带括号

封装自己的数学对象

<script>
        // 利用对象封装自己的数学对象  里面有 PI 最大值和最小值
        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 min = arguments[0];
                for (var i = 1; i < arguments.length; i++) {
                    if (arguments[i] < min) {
                        min = arguments[i];
                    }
                }
                return min;
            }
        }
        console.log(myMath.PI);
        console.log(myMath.max(1, 5, 9));
        console.log(myMath.min(1, 5, 9));
    </script>

Math绝对值和三个取整方法

    <script>
        // 1.绝对值方法
        console.log(Math.abs(1)); // 1
        console.log(Math.abs(-1)); // 1
        console.log(Math.abs('-1')); // 隐式转换 会把字符串型 -1 转换为数字型
        console.log(Math.abs('pink')); // NaN 

        // 2.三个取整方法
        // (1) Math.floor()   地板 向下取整  往最小了取值
        console.log(Math.floor(1.1)); // 1
        console.log(Math.floor(1.9)); // 1
        // (2) Math.ceil()   ceil 天花板 向上取整  往最大了取值
        console.log(Math.ceil(1.1)); // 2
        console.log(Math.ceil(1.9)); // 2
        // (3) Math.round()   四舍五入  其他数字都是四舍五入,但是 .5 特殊 它往大了取  
        console.log(Math.round(1.1)); // 1
        console.log(Math.round(1.5)); // 2
        console.log(Math.round(1.9)); // 2
        console.log(Math.round(-1.1)); // -1
        console.log(Math.round(-1.5)); // 这个结果是 -1
    </script>

生成随机数方法

random() 方法可以随机返回一个小数,其取值范围是 [0,1),左闭右开 0 <= x < 1

怎么获取两个数之间的整数并且包含这两个数呢?

Math.floor(Math.random() * (max - min + 1)) + min

    <script>
        // 1.Math对象随机数方法   random() 返回一个随机的小数  0 =< x < 1
        // 2. 这个方法里面不跟参数
        // 3. 代码验证 
        console.log(Math.random());
        // 4. 我们想要得到两个数之间的随机整数 并且 包含这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));
        // 5. 随机点名  
        var arr = ['张三', '张三丰', '张三疯子', '李四', '李思思', 'pink老师'];
        // console.log(arr[0]);
        console.log(arr[getRandom(0, arr.length - 1)]);
    </script>

猜数字游戏案例

程序随机生成一个 1~ 10 之间的数字,并让用户输入一个数字,
1. 如果大于该数字,就提示,数字大了,继续猜;
2. 如果小于该数字,就提示数字小了,继续猜;
3. 如果等于该数字,就提示猜对了,
结束程序。
 <script>
        // 猜数字游戏
        // 1.随机生成一个1~10 的整数  我们需要用到 Math.random() 方法。
        // 2.需要一直猜到正确为止,所以需要一直循环。
        // 3.while 循环更简单
        // 4.核心算法:使用 if  else if 多分支语句来判断大于、小于、等于。
        function getRandom(min, max) {
            return Math.floor(Math.random() * (max - min + 1)) + min;
        }
        var random = getRandom(1, 10);
        while (true) { // 死循环
            var num = prompt('你来猜? 输入1~10之间的一个数字');
            if (num > random) {
                alert('你猜大了');
            } else if (num < random) {
                alert('你猜小了');
            } else {
                alert('你好帅哦,猜对了');
                break; // 退出整个循环结束程序
            }

        }
        // 要求用户猜 1~50之间的一个数字 但是只有 10次猜的机会
    </script>

Date对象

Date 对象和 Math 对象不一样,他是一个构造函数,所以我们需要实例化后才能使用

Date 实例用来处理日期和时间

如果Date()不写参数返回当前时间,写参数返回括号内输入的时间

    <script>
        // Date() 日期对象  是一个构造函数 必须使用new 来调用创建我们的日期对象
        var arr = new Array(); // 创建一个数组对象
        var obj = new Object(); // 创建了一个对象实例
        // 1. 使用Date  如果没有参数 返回当前系统的当前时间
        var date = new Date();
        console.log(date);
        // 2. 参数常用的写法  数字型  2019, 10, 01  或者是 字符串型 '2019-10-1 8:8:8'
        var date1 = new Date(2019, 10, 1);
        console.log(date1); // 返回的是 11月 不是 10月 
        var date2 = new Date('2019-10-1 8:8:8');
        console.log(date2);
    </script>

日期格式化

注意月份加一

格式化日期 年月日

    <script>
        // 格式化日期 年月日 
        var date = new Date();
        console.log(date.getFullYear()); // 返回当前日期的年  2019
        console.log(date.getMonth() + 1); // 月份 返回的月份小1个月   记得月份+1 呦
        console.log(date.getDate()); // 返回的是 几号
        console.log(date.getDay()); // 3  周一返回的是 1 周六返回的是 6 但是 周日返回的是 0
        // 我们写一个 2019年 5月 1日 星期三
        var year = date.getFullYear();
        var month = date.getMonth() + 1;
        var dates = date.getDate();
        var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
        var day = date.getDay();
        console.log('今天是:' + year + '年' + month + '月' + dates + '日 ' + arr[day]);
    </script>

格式化时分秒

<script>
        // 格式化日期 时分秒
        var date = new Date();
        console.log(date.getHours()); // 时
        console.log(date.getMinutes()); // 分
        console.log(date.getSeconds()); // 秒
        // 要求封装一个函数返回当前的时分秒 格式 08:08:08
        function getTimer() {
            var time = new Date();
            var h = time.getHours();
            h = h < 10 ? '0' + h : h;
            var m = time.getMinutes();
            m = m < 10 ? '0' + m : m;
            var s = time.getSeconds();
            s = s < 10 ? '0' + s : s;
            return h + ':' + m + ':' + s;
        }
        console.log(getTimer());
    </script>

获取日期的总的毫秒形式

    <script>
        // 获得Date总的毫秒数(时间戳)  不是当前时间的毫秒数 而是距离1970年1月1号过了多少毫秒数
        // 1. 通过 valueOf()  getTime()
        var date = new Date();
        console.log(date.valueOf()); // 就是 我们现在时间 距离1970.1.1 总的毫秒数
        console.log(date.getTime());
        // 2. 简单的写法 (最常用的写法)
        var date1 = +new Date(); // +new Date()  返回的就是总的毫秒数
        console.log(date1);
        // 3. H5 新增的 获得总的毫秒数
        console.log(Date.now());
    </script>

京东倒计时案例

  1. 核心算法:输入的时间减去现在的时间就是剩余的时间,即倒计时 ,但是不能拿着时分秒相减,比如 05 分减去25分,结果会是负数的。
  2. 用时间戳来做。用户输入时间总的毫秒数减去现在时间的总的毫秒数,得到的就是剩余时间的毫秒数。
  3. 把剩余时间总的毫秒数转换为天、时、分、秒 (时间戳转换为时分秒)

        // 转换公式如下:
        //  d = parseInt(总秒数/ 60/60 /24);    //  计算天数
        //  h = parseInt(总秒数/ 60/60 %24)   //   计算小时
        //  m = parseInt(总秒数 /60 %60 );     //   计算分数
        //  s = parseInt(总秒数%60);            //   计算当前秒数

    <script>
        // 倒计时效果
        function countDown(time) {
            var nowTime = +new Date(); // 返回的是当前时间总的毫秒数
            // console.log(nowTime);
            var inputTime = +new Date(time); // 返回的是用户输入时间总的毫秒数
            var times = (inputTime - nowTime) / 1000; // times是剩余时间总的秒数 
            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'));
        var date = new Date();
        // console.log(date);
    </script>

数组对象Array

创建数组方式

  1. 字面量创建    var arr=[2]; //创建了一个为2的数组
  2. new Array()  

var arr = new Array(3);

如果括号里面是纯数字,表示规定了数组长度。

如果括号里面是多个参数,表示规定了数组的元素。

new Array(2);//表示数组长度为2,数组元素为空

new Array('3');//表示数组长度为1,有一个数组元素是字符串3

new Array(1,2,3); //数组长度为3,有三个数组元素 

检测是否数组的方式

  1. instanceof   -- 返回值  true   false
  2. Array.isArray() -- 返回值  true  false

添加、删除数组元素

push在我们数组的末尾 添加一个或者多个数组元素

         (1) push 是可以给数组追加新的元素

        (2) push() 参数直接写 数组元素就可以了

        (3) push完毕之后,返回的结果是 新数组的长度

        (4) 原数组也会发生变化

unshift在我们数组的开头 添加一个或者多个数组元素

        (1) unshift是可以给数组前面追加新的元素

        (2) unshift() 参数直接写 数组元素就可以了

        (3) unshift完毕之后,返回的结果是 新数组的长度

        (4) 原数组也会发生变化

pop可以删除数组的最后一个元素

         (1) pop是可以删除数组的最后一个元素 记住一次只能删除一个元素

        (2) pop() 没有参数

        (3) pop完毕之后,返回的结果是 删除的那个元素

        (4) 原数组也会发生变化

shift() 它可以删除数组的第一个元素

        (1) shift是可以删除数组的第一个元素 记住一次只能删除一个元素

        (2) shift() 没有参数

        (3) shift完毕之后,返回的结果是 删除的那个元素

        (4) 原数组也会发生变化

筛选数组案例

        var arr = [1500, 1200, 2000, 2100, 1800];
        var newArr = [];
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] < 2000) {
                newArr.push(arr[i]);
            }
        }
        console.log(newArr);

数组排序

翻转数组 arr.reverse();

数组排序arr.sort();

        var arr1 = [13, 4, 77, 1, 7];
        arr1.sort(function (num1, num2) {
            return num2 - num1;//降序
            //return num1-num2; 升序
        });
        console.log(arr1);

数组索引方法

indexof();

返回指定值在数组中第一次出现的索引; 找不到则返回 -1

lastIndexOf();

var arr = ['red', 'green', 'blue', 'pink', 'blue'];

console.log(arr.lastIndexOf('blue')); // 4

从后往前查找,指定值在数组第一次出现的索引; 找不到则返回 -1  (了解即可)

数组去重案例

数组去重 ['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b'] 要求去除数组中重复的元素。

        1.目标: 把旧数组里面不重复的元素选取出来放到新数组中, 重复的元素只保留一个, 放到新数组中去重。

        2.核心算法: 我们遍历旧数组, 然后拿着旧数组元素去查询新数组, 如果该元素在新数组里面没有出现过, 我们就添加, 否则不添加。

        3.我们怎么知道该元素没有存在? 利用 新数组.indexOf(数组元素) 如果返回时 - 1 就说明 新数组里面没有改元素

 // 封装一个 去重的函数 unique 独一无二的 
        function unique(arr) {
            var newArr = [];
            for (var i = 0; i < arr.length; i++) {
                if (newArr.indexOf(arr[i]) === -1) {
                    newArr.push(arr[i]);
                }
            }
            return newArr;
        }
        // var demo = unique(['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b'])
        var demo = unique(['blue', 'green', 'blue'])
        console.log(demo);

数组转换为字符串

arr.tostring(默认逗号分隔)

arr.join();(括号里面可以添加自定义分隔符)arr.join('-');arr.join('&');

数组分割

语法:splice(index位置, 要删除的数量, 要添加的新项) 注意:支持参数负值

返回值:新数组

var arr = [10, 20, '22', '33', null, true];
// arr.splice(1);//从索引为1的位置开始,删除之后的元素
// console.log(arr);//10
arr.splice(1,0); //从索引为 1的位置,删除0个元素
arr.splice(1, 3);//从索引为1位置(包含自己),开始删 3个
arr.splice(0, 2, '哈哈', '啊啊');//从索引为0位置开始,删掉2个元素,同时添加了一个字符串'哈哈'
arr.splice(2, 2, '哈哈', '啊啊'); //从索引为2位置开始,删除了2个元素,并且又从被删除的位置添加匹配了两个新元素
console.log(arr);

字符串对象

根据字符返回位置

indexOf() 返回值:找到索引。找不到 返回 -1

返回字符位置案例

        查找字符串"abcoefoxyozzopp"中所有o出现的位置以及次数

        核心算法:先查找第一个o出现的位置

        然后 只要indexOf 返回的结果不是 -1 就继续往后查找

        因为indexOf 只能查找到第一个,所以后面的查找,一定是当前索引加1,从而继续查找

        var str = "oabcoefoxyozzopp";
        var index = str.indexOf('o');
        var num = 0;
        // console.log(index);
        while (index !== -1) {
            console.log(index);
            num++;
            index = str.indexOf('o', index + 1);
        }
        console.log('o出现的次数是: ' + num);

根据位置返回字符

charAt(index索引) 根据索引返回字符 (找不到,返回空字符串)

charCodeAt(index索引) 根据索引返回字符的ASCII值

str[index索引] -- 根据索引返回位置 -- H5新增的 -- 了解!

字符串操作

        // 字符串操作方法
        // 1. concat('字符串1','字符串2'....)
        var str = 'andy';
        console.log(str.concat('red'));

        // 2. substr('截取的起始位置', '截取几个字符');
        var str1 = '改革春风吹满地';
        console.log(str1.substr(2, 2)); // 第一个2 是索引号的2 从第几个开始  第二个2 是取几个字符
  

字符串替换 --- replace('被替换的字符','替换为的字符') 注意:一次只能替换一个。 -- 记住!

字符串转为数组 -- split('分隔符') 返回值:一个新数组 -- 记住!

trim() -- 去除两端的空格 -- 记住!

toUpperCase(); -- 转为大小字母

toLowerCase() -- 转为小写

简单数据类型和复杂数据类型

  1. 简单类型基本数据类型值类型):在存储时变量中存储的是值本身,包括string ,number,boolean,undefined,null (放栈)
  2. 复杂数据类型(引用类型):在存储时变量中存储的仅仅是地址(引用),通过 new 关键字创建的对象(系统对象、自定义对象),如 Object、Array、Date等;(放堆)
  • 30
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值