[TOC]

✊总有人要成为第一,为什么不是你。

2021年08月10日

工作重点

1 工作重点事项 进度 已完成
2 早上讲内置对象(Number和Math和Date) 已完成
- [x]

| | 3 | 下午讲全局对象和复杂数据类型及其操作 | 已完成 |
- [x]

| | 4 | 晚上做练习 | 已完成 |
- [x]

|

遇到的问题和解决思路

遇到的问题

  1. 指定范围的随机数

  2. 解决思路

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


  4. 今日总结

    (1)Number对象

(2)Date对象

<script><br />        var date = new Date();<br />        // console.dir(date);<br />        <br />        var year = date.getFullYear();<br />        console.log(year);//2021<br />        var month = date.getMonth();<br />       ** /* **<br />**            month是从零开始的,应该加一**<br />**        */**<br />        console.log(month);//7+1<br />        var date1 = date.getDate();<br />        console.log(date1);//10<br />        var day = date.getDay();<br />        console.log(day);//2<br />        var hour = date.getHours();<br />        console.log(hour);//11<br />        var minutes=date.getMinutes();<br />        console.log(minutes);//10<br />        var seconds = date.getSeconds();<br />        console.log(seconds);//34<br />       ** /* **<br />**            获取时间戳的四种方法**<br />**        */**<br />        var value = date.valueOf();//1628565170013<br />        value = date.getTime();//1628565194050<br />        var newValue = +new Date();//1628565327639<br />        var nowValue = Date.now();//1628565403029<br />        console.log(nowValue);<br />      **  /* **<br />**            指定时间**<br />**            指定的时间格式字符串**<br />**            毫秒数**<br />**        */**<br />       var date2 = new Date("2021-08-10 11:19:18");//Tue Aug 10 2021 11:19:18 GMT+0800 (中国标准时间)<br />       var myYear = date2.getFullYear();//2021<br />       var date3 = new Date(1628565403029);<br />       var myYear1 = date3.getFullYear();//2021<br />       var date4 = new Date("Tue Aug 10 2021 11:19:18 GMT+0800 (中国标准时间)");<br />       var myYear2 = date4.getFullYear();//2021<br />       console.log(myYear2);<br />        <br />    </script>

(3)Math

<script><br />        **// 圆周率**<br />        var value = Math.PI;//3.141592653589793<br />       ** // 最大最小值**<br />        value = Math.min(2, 4, 1, 7, 3);//1<br />        value = Math.max(21, 13, 54, 12);//54<br />      **  // 绝对值**<br />        value = Math.abs(-2);//2<br />        **// Math.pow(x,y) x的y次幂**<br />        value = Math.pow(4, 2);//16<br />        **// 向上取整**<br />        value = Math.ceil(5.3);//6<br />       ** // 向下取整**<br />        value = Math.floor(5.3);//5<br />       ** // 四舍五入  若参数为负数 小于等于0.5 向上取整  大于0.5 向下取整**<br />        value = Math.round(-3.6);//3<br />      **  /* **<br />**            得到一个[0,1)之间的数**<br />**            获取指定范围内的随机整数**<br />**            return Math.floor(Math.random() * (max - min + 1) + min); **<br />**        */**<br />        // value = Math.random();0.6471265577436747<br />        value = Math.floor(Math.random() * (100 - 10 + 1) + 10)<br />        console.log(value);<br />    </script>

(4)编码和解码方法

<script><br />**        /* **<br />**            对字符串编码的方式**<br />**        */**<br />        var value = escape("https://huohua30.yuque.com/nuev55/zng82a/ahc2qkxzwfgr#a8GT8");<br />        //https%3A//huohua30.yuque.com/nuev55/zng82a/ahc2qkxzwfgr%23a8GT8<br />        value = encodeURI("https://huohua30.yuque.com/nuev55/zng82a/ahc2qkxzwfgr#a8GT8");<br />        // https://huohua30.yuque.com/nuev55/zng82a/ahc2qkxzwfgr#a8GT8<br />        value = encodeURIComponent("https://huohua30.yuque.com/nuev55/zng82a/ahc2qkxzwfgr#a8GT8");<br />        //https%3A%2F%2Fhuohua30.yuque.com%2Fnuev55%2Fzng82a%2Fahc2qkxzwfgr%23a8GT8<br />        **/* **<br />**        **<br />**            解码方式**<br />**        */**<br />        value = decodeURIComponent("https%3A%2F%2Fhuohua30.yuque.com%2Fnuev55%2Fzng82a%2Fahc2qkxzwfgr%23a8GT8");<br />        //https://huohua30.yuque.com/nuev55/zng82a/ahc2qkxzwfgr#a8GT8<br />        console.log(value);<br />    </script><br /></body><br /></html>

(5)eval

<script><br />        **/* **<br />**            解析字符串为js代码,并执行**<br />**        */**<br />        eval("alert('hello')");<br />    </script>

(6)对象的操作

<script><br />        var obj = {}<br />        obj.name = "121";<br />        obj["age"] = 14;<br />      **  /* **<br />**            对象中的delete不保留位置**<br />**        */**<br />        // delete obj.age;<br />        // console.log(obj);//{name: "121"}<br />      **  /* **<br />**            判断对象当中是否存在某个属性**<br />**            in 操作符(判断自身和父级)**<br />**            属性名 in 对象**<br />**            obj.hasOwnProperty(属性名)(只判断自身)**<br />**        **<br />**        */**<br />        // console.log("age" in obj);<br />        console.log(obj.hasOwnProperty("age"));<br />    </script>

(7)复杂数据类型

<script><br />       ** /* **<br />**            instanceof**<br />**            判断复杂数据类型,若判断基本数据类型,需要将基本数据类型变成包装数据类型,然后判断**<br />**        **<br />**        */**<br />        var value = [] instanceof Array;//true<br />        value = "[]" instanceof Array;//false<br />        value = [] instanceof Object;//true<br />        value = function fun(){} instanceof Object;//true<br />        var date = new Date();<br />        value = date instanceof Date;//true<br />        value = "aa" instanceof String;//false<br />        value = null instanceof Object;//false<br />        function Abc(){<br />        }<br />        var abc = new Abc();<br />        value = abc instanceof Abc;//true<br />        console.log(value);<br />    </script>

续昨天

2.5 Number对象

// 创建 Number 对象
var objNum = new Number(23);
var num = 123.456;
//把 Number 四舍五入为指定小数位数的数字
console.log(num.toFixed(2));
  • Number 对象属性 | 属性 | 描述 | | —- | —- | | MAX_VALUE | 可表示的最大的数。 | | MIN_VALUE | 可表示的最小的数。 | | NEGATIVE_INFINITY | 负无穷大,溢出时返回该值。 | | POSITIVE_INFINITY | 正无穷大,溢出时返回该值。 |
  • Number 对象方法 | 方法 | 描述 | | —- | —- | | toFixed(x) | 把数字转换为字符串,结果的小数点后有指定位数的数字。 | | toExponential() | 把对象的值转换为指数计数法。 | | isFinite() | 用来检测传入的参数是否是一个有穷数 |

2.6 Boolean对象

var bool1 = false;
var bool2 = new Boolean(true);
console.log(bool1)
console.log(bool2)

2.7 日期对象

Date 对象,Date是一个构造函数,所以使用时需要实例化后才能使用其中具体方法和属性。Date 实例用来处理日期和时间

  • 使用Date实例化日期对象

  • 获取当前时间必须实例化:

var now = new Date();
  • 获取指定时间的日期对象
var date1 = new Date('2020/1/16');
var date2 = new Date('2020-1-16 0:0:0');
  • 注意:如果创建实例时并未传入参数,则得到的日期对象是当前时间对应的日期对象

  • 使用Date实例的方法和属性


📝第十天 每日总结(js的内置对象及常用方法) - 图1

  • 通过Date实例获取总毫秒数(时间戳)

    • 总毫秒数的含义
      基于1970年1月1日(世界标准时间)起的毫秒数

    • 获取总毫秒数

// 实例化Date对象
var now = new Date();
// 1. 用于获取对象的原始值
console.log(date.valueOf())    
console.log(date.getTime())    
// 2. 简单写可以这么做
var now = +new Date();            
// 3. HTML5中提供的方法,有兼容性问题
var now = Date.now();

2.8 Math对象

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

属性、方法名 功能
Math.PI 圆周率
Math.max()/Math.min() 求最大和最小值
Math.abs() 绝对值
Math.pow(x,y) pow() 方法可返回 x 的 y 次幂的值。
Math.floor() 向下取整
Math.ceil() 向上取整
Math.round() 四舍五入版 就近取整 注意 -3.5 结果是 -3 (往大的取)
Math.random() 获取范围在[0,1)内的随机值

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

获取指定范围内的随机整数:

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

2.9 JavaScript 全局对象

全局对象描述

全局对象(global object)在javascript中有着重要的用途:全局对象的属性是全局定义的符号,通过使用全局对象,可以访问其他所有预定义的对象、函数和属性。

  • 顶层对象在浏览器环境中指的是window对象,在Node环境中指的是global对象。在ES5中顶层对象的属性与全局变量是等价的。

  • 全局对象,Global中封装的方法不需要对象就可以直接调用。 直接写:方法名();

  • 分类

    • 1.全局属性:比如undefined、Infinity以及NaN。
    • 2.全局对象:比如Math、JSON
    • 3.全局函数:比如isNaN()、isFinite()、parseInt()和eval()等。
    • 4.全局构造器(constructor),也即全局类。比如Date()、RegExp()、String()、Object()、 Function()和Array()、Number()、Boolean()等。

顶层函数(全局函数)

函数 描述
decodeURI() 解码某个编码的 URI。
decodeURIComponent() 解码一个编码的 URI 组件。
encodeURI() 把字符串编码为 URI。
encodeURIComponent() 把字符串编码为 URI 组件。
escape() 可对字符串进行编码。
unescape() 对由 escape() 编码的字符串进行解码。
eval() 计算 JavaScript 字符串,并把它作为脚本代码来执行。
isFinite() 用来判断被传入的参数值是否为一个有穷数
isNaN() 检查其参数是否是非数字值。
Number() 把对象的值转换为数字。
parseFloat() 解析一个字符串并返回一个浮点数。
parseInt() 解析一个字符串并返回一个整数。
String() 把对象的值转换为字符串。

*多学一招

全局作用域中,提供了isFinite,可以判断是否是有限的,判断的不够准确(会对字符串,布尔值等做转换)

ES6为了纠正这个问题,提供过滤Number.isFinite方法,只能判断数字类型是否是有限的。

escape、encodeURI和encodeURIComponent的应用场景

1、如果只是编码字符串,不和URL有任何关系,那么用escape,而且这个方法一般不会用到。
ASCII字母、数字、@*/+ ,这几个字符不会被编码,其余的都会。

2、如果你需要编码整个URL,然后需要使用这个URL,那么用encodeURI。
不会对下列字符编码 ASCII字母、数字、~!@#$&*()=:/,;?+’

3、当你需要编码URL中的参数的时候,那么encodeURIComponent是最好方法。
不会对下列字符编码 ASCII字母、数字、~!*()’

参考(变强必备)

escape、encodeURI和encodeURIComponent的区别

2.10 普通函数和构造函数的区别

构造函数
  1. new test( ) 用new关键字调用。
  2. this指向的是构造出的新对象。
  3. 构造函数是不需要用return显式返回值的,默认会返回this,也就是新的实例对象。
  4. 构造函数一般是首字母大写。

普通函数
  1. test( ) 不需要用new关键字调用。
  2. 函数内部的this指向调用函数的对象(如果没有对象调用,默认是window)。


总结:

  • 1.普通函数:做业务处理,构造函数:自定义实例化对象
  • 2.构造函数首字母大写

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

3.1 简单数据类型

简单类型(基本数据类型、值类型):在存储时变量中存储的是值本身,包括String ,Number,Boolean,Undefined,Null

3.2 复杂数据类型

复杂数据类型(引用类型):在存储时变量中存储的仅仅是地址(引用),通过 new 关键字创建的对象(系统对象、自定义对象),如 Object、Array、Date、Function等;

3.3 对于复杂数据类型的访问、增删改

3.3.1 数组

var arr = [2,4,5,8]
//访问
console.log(arr[2]);
//增加
arr[4] = 9;
//修改
arr[0] = 1;
//删除--数值--保留空的位置
delete arr[3];
// 方式1 推荐 
arr = [];
// 方式2 
arr.length = 0;
// 方式3
arr.splice(0, arr.length);
arr.splice(0);

3.3.2 对象

var obj1 = {
            myName: '雷布斯',
            age: 40,
            gender: '男',
            eat: function() {
                console.log('吃饭啦!');
            }
        };
        // 访问属性
        console.log(obj1.myName)
        console.log(obj1.age)
        console.log(obj1['gender'])
                obj1.eat();
        obj1['eat']();
        // 修改属性
        obj1.myName = '乔布斯';
        obj1['age'] = 50;
        obj1.eat = function() {
            console.log('又该吃饭啦');
        };
        obj1['eat'] = function() {
            console.log('中午吃啥呀');
        };
        // 添加属性
        obj1.address = '中国';
        obj1.sleep = function() {
            console.log('年轻人,不要老熬夜,洗洗睡吧')
        };
        // 删除属性
        delete obj1.age;
        delete obj1.address;
        delete obj1['gender'];

3.4 instanceof检测复杂数据类型

在 JavaScript 中,判断一个变量的类型常常,会用 typeof 运算符,在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 “object”。

ECMAScript 引入了另一个 Java 运算符 instanceof 来解决这个问题。instanceof 运算符与 typeof 运算符相似,用于识别正在处理的对象的类型。与 typeof 方法不同的是,instanceof 方法要求开发者明确地确认对象为某特定类型。

自己总结

Number函数常用方法

(1)toFixed()

 ** toFixed()指定保留的位数,同时四舍五入**<br />**            参数:保留的位置**<br />**            返回值:保留后的数**

(2)isFinite()

  **isFinite()判断是否是有穷的**<br />**            对参数进行隐式类型转换为数值型 用Number()函数**<br />**            返回值为:布尔 **

获取时间戳的四种方法

var value = date.valueOf();
value = date.getTime();
var newValue = +new Date();
var nowValue = Date.now();

Math对象的方法

属性、方法名 功能
Math.PI 圆周率
Math.max()/Math.min() 求最大和最小值
Math.abs() 绝对值
Math.pow(x,y) pow() 方法可返回 x 的 y 次幂的值。
Math.floor() 向下取整
Math.ceil() 向上取整
Math.round() 四舍五入版 就近取整 注意 -3.5 结果是 -3 (往大的取)
Math.random() 获取范围在[0,1)内的随机值

Math.floor()// 四舍五入 若参数为负数 小于等于0.5 向上取整 大于0.5 向下取整

获取指定范围内的随机整数
Math.floor(Math.random() * (max - min + 1) + min);

对象的操作

对象中的delete不保留位置
判断对象当中是否存在某个属性
in 操作符(判断自身和父级)
属性名 in 对象
obj.hasOwnProperty(属性名)(只判断自身)

复杂数据类型的判断

instanceof
判断复杂数据类型,若判断基本数据类型,需要将基本数据类型变成包装数据类型,然后判断

typeOf 返回值是数据类型,告诉你这是什么数据
instanceof 返回值是布尔值 此变量是否属于某一类数据类型