JavaScript 中重要的对象

208 阅读5分钟

重要的对象们

js 中凡引用类型都是对象, 函数是引用类型因而也是对象, 重要的对象自然也就包括了重要的构造函数即类, 因为 js 的类是通过函数来实现的

包装类型

let a = new String("word");
console.log(typeof a); // object
  1. 有哪些基本数据类型? 字符串类型 / 数值类型 / 布尔类型 / 空类型 / 未定义类型/ symbol

  2. 通过字面量创建的基本数据类型的数据都是常量

  3. 常量的特点和注意点

    • 常量是不能被修改的

      let str = "abc";
      str[1] = "m";
      console.log(str); // abc
      
    • 每次‘修改’或者拼接都是生成一个新的

      let str = "abc";
      let newStr = str.replace("b", "m");
      console.log(str); // abc
      console.log(newStr); // amc
      
  4. 基本类型特点

    • 没有属性和方法

      let str = "lnj";
      str.age = 34;
      str.say = function () {
          console.log("hello");
      }
      console.log(str.age); // undefined
      str.say(); // str.say is not a function
      
  5. 对象类型的特点

    • 有属性和方法
  6. 以前之所以能够访问基本数据类型的属性和方法, 是因为

    • 在运行的时候系统自动将基本数据类型包装成了对象类型

    • String() / Number() / Boolean()

      let str = "www.it666.com";
      // let str = new String(str); // 底层不是 string 基本类型而是 String 类 new 出来的对象在调方法
      console.log(str.length);
      str.split(".");
      

三大对象

JavaScript中提供三种自带的对象, 分别是:

  1. 本地对象
  2. 内置对象
    1. Global
    2. Math
    3. JSON
  3. 宿主对象

什么是宿主?

  • 宿主就是指JavaScript运行环境, js 可以在浏览器中运行, 也可以在服务器上运行

本地对象

  • 与宿主无关,无论在浏览器还是服务器中都有的对象
  • 就是 ECMAScript 标准中定义的类(构造函数) 生产的对象
  • 在使用过程中需要我们手动 new 创建
  • 例如:Boolean、Number、String、Array、Function、Object、Date、RegExp 等

内置对象

  • 与宿主无关,无论在浏览器还是服务器中都有的对象
  • JavaScript 已经帮我们创建好的对象。
  • 在使用过程中无需我们手动 new 创建
  • 例如:Global、Math、JSON、 Date

宿主对象

  • 对于嵌入到网页中的JS来说,其宿主对象就是浏览器, 所以宿主对象就是浏览器提供的对象
  • 包含: Window和Document等
  • 所有的 DOM 和 BOM 对象都属于宿主对象, 只浏览器宿主提供 DOM 和 BOM

内置对象们

Math

Math.floor() | 向下取整

Math.ceil() | 向上取整

Math.round() | 四舍五入

Math.abs() | 绝对值

Math.random() | 生成随机数

经典应用 (可不简单嘞!):

// 需求: 要求生成一个1~10的随机数
function getRandomIntInclusive(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min; //含最大值,含最小值
}
let value = getRandomIntInclusive(0, 10);
console.log(value);

/*
分析一波:
10 - 0 + 1 = 11
Math.random() 是生产从零到一左闭右开区间内的所有浮点数
Math.random() * 11 得到从零到十一左闭右开的平均概率密度的区间
十一个数字恰分出十小段, 每段的可能性是相等的, 因为 random 恰取到整数的概率趋近于 0

*/

Date

基操
  1. 获取当前时间 new 出来的对象有一个标准格式 我们一般不用这个默认的格式

    let date = new Date();
    console.log(date); // 2020-11-07T10:10:34.483Z
    console.log(typeof date); // object 
    
  2. 获取当前时间距离1970年1月1日(世界标准时间)起的毫秒

    • 方法一

      console.log(Date.now());
      
    • 方法二

      // 日记对象进行计算时底层就是调用这个 .valueof
      let date = new Date();
      console.log(date.valueOf());
      
  3. 创建指定时间

    • 方法一

      // 年月日时分秒 
      let date = new Date("2020-11-07 10:10:34");
      console.log(date);
      
    • 方法二 注意点: 在创建指定时间的时候, 如果月份是单独传入的, 那么会多一个月

      let date = new Date(2020, 10, 07, 9, 8, 7);
      console.log(date);
      
  4. 获取指定时间年月日时分秒

    	x 1let date = new Date();2console.log(date.getFullYear());34// 注意点; 通过getMonth方法获取到的月份会少一个月5console.log(date.getMonth() + 1);67console.log(date.getDate()); // 拿几号8console.log(date.getHours());9console.log(date.getMinutes());10console.log(date.getSeconds());1112// 此外还有13console.log(date.getMilliseconds());14console.log(date.getDay()); // 拿周几js
    
  5. 时间格式化

    let date = new Date();
    let res = formatDate(date);
    
    console.log(res); // 2020-11-7 18:30:46
    
    function formatDate(date) {
        return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()} ${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`;
    }
    
计算时间差

拿到两个时间点的毫秒值, 算出两个时间点相差几天几小时几分几秒

	 1// 1000毫秒 = 1秒   60秒 = 1分钟  60分钟 = 1小时  24小时 = 1天2// 以下两个时间相差值 10天1小时29分40秒3let curDate = new Date("2020-4-19 22:30:20");4let remDate = new Date("2020-4-30 00:00:00");5// 1.得到两个时间之间的差值(毫秒)6let differTime = remDate - curDate;7// let differTime = remDate.valueOf() - curDate.valueOf();8// 2.得到两个时间之间的差值(秒)9let differSecond = differTime / 1000;10// 3.利用相差的总秒数 / 每一天的秒数 = 相差的天数11let day = Math.floor(differSecond / (60 * 60 * 24));12console.log(day);13// 4.利用相差的总秒数 / 小时 % 24;14let hour = Math.floor(differSecond / (60 * 60) % 24);15console.log(hour);16// 5.利用相差的总秒数 / 分钟 % 60;17let minute = Math.floor(differSecond / 60 % 60);18console.log(minute);19// 6.利用相差的总秒数 % 秒数20let second = differSecond % 60;21console.log(second);2223// 用 parseInt 不合适( IDE 会给警告), 因为 parseInt 应该接收字符串, 尽管是弱类型语言, 啥类干啥事最好还是分清楚    js