✊总有人要成为第一,为什么不是你。
2021年08月10日
工作重点
1 | 工作重点事项 | 进度 | 已完成 |
---|---|---|---|
2 | 早上讲内置对象(Number和Math和Date) | 已完成 | - [x] |
|
| 3 | 下午讲全局对象和复杂数据类型及其操作 | 已完成 |
- [x]
|
| 4 | 晚上做练习 | 已完成 |
- [x]
|
遇到的问题和解决思路
遇到的问题
(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实例的方法和属性
通过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 普通函数和构造函数的区别
构造函数
- new test( ) 用new关键字调用。
- this指向的是构造出的新对象。
- 构造函数是不需要用return显式返回值的,默认会返回this,也就是新的实例对象。
- 构造函数一般是首字母大写。
普通函数
- test( ) 不需要用new关键字调用。
- 函数内部的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 返回值是布尔值 此变量是否属于某一类数据类型