一.概述

1.对象(Object):属于引用数据类型

(1)对象是一种复合型的数据类型,在对象中可以保存多个不同数据类型的属性

2.对象的分类:

(1)内建对象:由ES标准中定义的对象,在任何的ES的实现中都可以使用

  • 例如:Math,String,Number,Boolean,Function,Object等

(2)宿主对象:由JS的运行环境提供的对象,目前来讲主要是指浏览器提供的对象

  • 例如:BOM DOM等

(3)自定义对象:开发人员自己创建的对象

3.一切皆对象,对象由属性和行为构成

(1)数组也是对象

二.对象的基本使用

1.创建对象:

(1)利用字面量创建对象:就是{}中里包含了表达这个具体事物(对象)的属性和方法

  • 语法:var obj = {};//创建一个空对象,可以在括号内以键值对的方式写内容
  • 方法的值是一个匿名函数

    1. var obj = {
    2. name:"李丽"
    3. age:18,
    4. sayHi:function(){
    5. console.log("hi");
    6. }
    7. }

    (2)利用new Object创建对象:

  • var obj = new Object();//创建一个空对象—也属于通过构造函数创建对象

  • 利用=赋值来添加属性和方法

    1. var obj = new Object();
    2. obj.name = "Tim";
    3. obj.age = 19;
    4. obj.sayHi = function(){
    5. console.log("hi");
    6. }

    (3)利用构造函数创建对象:以上两种方法每次只能创建一个对象,用构造函数来创建可以弥补

  • 语法:function 构造函数名(){this.属性 = 值,this.方法 = 匿名函数}

  • 调用时就要用 new 构造函数名(); 来调用
  • 通过构造函数创建对象的过程叫对象的实例化
  • 构造函数首字母大写
  • 构造函数不需要return也能返回
  • 每new一次就可以创建一个对象,可以实现大量创建一个对象

    1. function Star(sname,age,sex){
    2. this.name = sname;
    3. this.age = age;
    4. this.sex = sex;
    5. this.sing = function(sang){
    6. console.log(sang);
    7. }
    8. }
    9. var ldh = new Star("刘德华"18,"男//调用构造函数返回的是一个对象
    10. console.log(ldh.name);
    11. ldh.sing("刚刚好");

    2.使用对象:

    (1)调用对象的属性,用:对象名.属性名 或 对象名[‘属性名’]
    (2)调用对象的方法,用:对象名.方法名();
    (3)删除对象的属性, 用:delete 属性名;

    3.对象的遍历:用for in

    (1)语法:for(变量 in 对象)
    (2)例如:for(var i in obj){console.log(i);}//直接变量输出属性名
    for(var i in obj){console.log(obj[i]);}//类名[变量]输出属性值

    4.垃圾回收:将null赋值给对象,js的垃圾回收机制会自动进行垃圾回收,不给null则不会

    (1)var obj = new Object(); obj = null;

    三.原型对象

    1.我们所创建的每一个函数,解析器都会向函数内添加一个属性prototype,这个属性对应着一个对象-原型对象

    2.当以构造函数的形式调用函数时,他所创建的对象都有一个隐含的属性,指向该构造函数的原型对象,可以通过proto访问该属性

    3.原型对象就相当于一个公共的区域,所有同一类的实例都可以访问到这个原型对象

    (1)可以将共有的属性和方法,统一设置到原型对象中

    4.当我们访问对象的属性或方法时,他会现在对象自身寻找,有的话直接用,没有则会去原型对象中找,原型对象也没有,再去原型对象的原型中找,以此类推,知道Object的原型;若还是没有,则返回undefined

    5.检查属性是否存在:

    (1)”属性” in 对象:用in检查是否存在某个属性时,即使本身没有,原型对象中有,也会返回true
    (2)对象.hasOwnProperty(“属性”):检查对象本身是否含有该属性

    四.内置对象

    1.概述:

    (1)内置对象就是go自带的对象,可以直接使用
    (2)内置对象文档:用于查询内置对象,以下网站可以进行查询

  • MDN:https://developer.mozilla.org/zh-CN/

  • w3school:https://www.w3school.com.cn/

    2.Math对象:不用实例化可以直接使用 括号内有字符串返回NaN

    (1)Math.max():都是数字但会最大值
    (2)Math.min():都是数字但会最小值
    (3)Math.PI:圆周率
    (4)Math.floor():向下取整
    (5)Math.ceil():向上取整
    (6)Math.round():就近取整(四舍五入)
    (7)Math.abs():取绝对值
    (8)random():生成0-1的随机数

  • 若想返回想要的两个数间的随机数,就要封装一个对象,代码如下:

  1. function getRandom(min,max){
  2. return Math.floor(Math.random() * (max-min+1) + min);
  3. }

3.Date对象:只能通过new来实例化对象

(1)date():返回系统的当前时间
(2)date(‘2019-5-1’):输出括号内的日期//可以以数字形式填入,例如:2019,5,1 但是返回的日期会增加一个月
(3)date.getFullYear():获取当前年份
(4)date.getMonth():获取当前月份的前一个月
(5)date.getDay():获取当前星期几(返回0-6)
(6)date.getDate():获取当天几号
(7)date.getHours():获取当前小时
(8)date.getMinutes():获取当前分钟
(9)date.getSeconds():获取当前秒钟
(10)date.valueOf()或date.getTime():返回距1970年1月1日的总毫秒数

  • HTMl5新增Date.now(),不用实例化就可以返回距1970年1月1日的总毫秒数
    1. var date = new Date();
    2. var year = date.getFullYear();
    3. var month = date.getMonth() + 1;
    4. var dates = date.getDate();
    5. var arr = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六']
    6. var day = date.getDay();
    7. console.log('今天是:' + year + '年' + month + '月' + dates + '日' + arr[day]);
    1. function getNowTime(){
    2. var h = date.getHours();
    3. h = h<10?'0'+h:h;//小于十前面加个0
    4. var m = date.getMinutes();
    5. m = m<10?'0'+m:m;
    6. var s = date.getSeconds();
    7. s = s<10?'0'+s:s;
    8. return h + ':' + m + ':' + s;
    9. }
    10. console.log(getNowTime());
    1. function countDown(time){
    2. var date = new Date();
    3. var nowTime = +new Date();//返回当前时间总毫秒数
    4. var inputTime = +new Date(time);//返回输入时间的毫秒数
    5. var times = (inputTime - nowTime) / 1000;//剩余时间的总的秒数 除1000了就是求得秒数
    6. var day = parseInt(times/60/60/24);
    7. var hour = parseInt(times/60/60%24);
    8. hour = hour<10?'0'+hour:hour;//小于十前面加个0
    9. var minute = parseInt(times/60%60);
    10. minute = minute<10>'0'+minute:minute;
    11. var second = parseInt(times%60);
    12. second = second<10>'0'+second:second;
    13. return day+'天'+hour+'小时'+minute+'分'+second+'秒';
    14. }
    15. console.log(countDown('2022-5-26 08:30:00'));

    4.Array对象:不用实例化可以直接使用

    (1)Array.isArray():判断括号内的值是否为一个数组,返回true或false
    (2)增删数组元素:以下四个方法都会改变原数组
方法 说明 返回值
push(参数1…) 末尾添加一个或多个元素 返回新数组的长度
pop() 删除数组的最后一个元素,不用参数 返回删除元素的值
unshift(参数1…) 向数组的开头增加一个或多个元素 返回新数组的长度
shift() 删除数组的第一个元素 返回第一个元素的值

(3)数组排序:以下2个方法都会改变原数组,返回新数组

方法 说明
reverse() 颠倒数组中元素的顺序,无参数
sort() 对数组排序,从小到大排序,但是只排第一位
  • 若想实现完美排序,要在sort()内加函数

    Array.sort(function(a.b){
    return a-b;//升序排列  降序排列就改成b-a
    });
    

    (4)indexOf():在数组中查找给定元素第一次出现的位置,返回索引;若不存在返回-1;

  • 同理,lastindexOf()就是返回最后一次出现的索引,不存在返回-1;

  • 利用该方法可实现数组去重

    //思想:拿出元素,检查新数组是否存在,不存在就填入新数组
    var arr = [1500,1200,2000,2100,1800,1890,1500,6000,3000,2000,2600,1500,1200,999,555,111,555];
    function unique(arr){
      var newarr = [];
      for (var i = 0;i<arr.length;i++){
          var flag = newarr.indexOf(arr[i]);
          if (flag != -1){
              continue;
          }else{
              newarr.push(arr[i]);
          }
      }
      return newarr;
    }
    console.log(unique(arr))
    

    (5)数组转换为字符串:

  • 数组名.toString()

  • 数组名.join(分隔符) 不写默认逗号分隔

(6)连接数组:数组名1.concat(数组名2,数组名3…)

  • 该方法不影响原数组,会返回一个新数组

(7)数组截取:数组名.slice(start,end)

  • 只写一个参数表示开始位置
  • 括号内是左闭右开区间

(8)数组删除:数组名.splice(start,要删除的个数,要替换的元素)

const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// inserts at index 1
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "June"]

months.splice(4, 1, 'May');
// replaces 1 element at index 4
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "May"]

5.字符串对象:

(1)字符串不可变,再次赋值只是更改了指向的地址,字符串所有的方法也不会改变字符串,同样是返回一个新的字符串
(2)根据字符返回位置:indexOf(‘要查找的字符’,start):在字符串中从start索引开始查找给定元素第一次出现的位置,返回索引;若不存在返回-1;

  • 同理,lastindexOf()就是返回最后一次出现的索引,不存在返回-1;
  • 不指定索引就从头开始查找

(3)根据位置返回字符:

方法名 说明 使用
charAt(index) 返回指定位置的字符 str.charAt(0)
charCodeAt(index) 获取指定位置的ASCII str.charCodeAt(0)
str[index] 获取指定位置的字符 str[0]

(4)字符串的截取:substr(start,length):从start开始,截取length个
(5)字符串替换:str.replace(‘被替换掉的’,’替换为的字符’) 但是只能替换一次
(6)字符串转为数组:字符串.split(分隔符) 分隔符要看字符串的分割符
(7)大小写转换:

  • toUpperCase():转换大写
  • toLowerCase():转换为小写