面向对象的程序设计
1.内置对象及内置函数
## 基本包装类型
基本包装类型,和其他引用类型一样,拥有内置的方法可以对数据进行额外操作。
每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型对象,
从而可以调用一些方法操作这些数据。
读取模式:后台就会自动创建一个基本包装类型的对象。
1.自动创建 String 类型的一个实例(和基本类型的值不同,这个实例就是一个基本包装类型的对象)
2.调用实例(对象)上指定的方法
3.销毁这个实例
//用 String 构造函数创建一个实例,这个实例是一个对象
var str = new String('test')
//对象中有内置方法供开发人员调用
var str2 = str.substring()
// 销毁这个实例
str = null
引用类型和基本包装类区别:
引用类型:使用new操作符创建的引用类型实例,在执行流离开当前作用域之前一直都保存在内存中,
基本包装类型:只存在一行代码的执行瞬间,然后立即销毁读取完就立即销毁
给基本类型添加方法或者属性:
*增加对应的包装对象的原型方法
*使用new运算符创建String对象
## Boolean类型
直接将Boolean当做一个工具方法来使用
## Number类型
*内置属性(静态属性,直接调用即可)
MAX_VALUE 可表示的最大的数。
MIN_VALUE 可表示的最小的数。
NaN 非数字值。
NEGATIVE_INFINITY 负无穷大,溢出时返回该值。
POSITIVE_INFINITY 正无穷大,溢出时返回该值
prototype 使您有能力向对象添加属性和方法。
*内置方法(对象方法)
toString 把数字转换为字符串,使用指定的基数。
toLocaleString 把数字转换为字符串,使用本地数字格式顺序。
toFixed 把数字转换为字符串,结果的小数点后有指定位数的数字。
toExponential 把对象的值转换为指数计数法。
toPrecision 方法可在对象的值超出指定位数时将其转换为指数计数法。
valueOf 返回一个 Number 对象的基本数字值。
## String类型
*对象属性
constructor 对创建该对象的函数的引用
length 字符串的长度
prototype 允许您向对象添加属性和方法
*字符方法
charAt(index) 返回指定索引位置的字符
charCodeAt(index) 以Unicode编码形式返回指定索引位置的字符
返回的字符以Unicode编码的形式返回
*字符串操作方法
concat() 连接字符串。与Array.prototype.concat类似
slice() 方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。
substring() 提取字符串中两个指定的索引号之间的字符。与slice一样,但是不支持负数参数
substr() 从起始索引号提取字符串中指定数目的字符。
*字符串位置方法
indexOf(str,n) 从n开始搜索第一个str,并将搜索的索引值返回 没有则返回-1
lastIndexOf(str,n) 从n开始搜索的最后一个str,并将搜索的索引值返回 没有则返回-1
*大小写转换方法
toLowerCase() 把字符串转换为小写。
toUpperCase() 把字符串转换为大写。
toLocaleLowerCase() 把字符串转换为小写。本地化
toLocaleUpperCase() 把字符串转换为大写。本地化
*字符串的模式匹配方法
match() 找到一个或多个正则表达式的匹配。
replace() 替换与正则表达式匹配的子串。
search() 检索与正则表达式相匹配的值。
split() 把字符串分割为字符串数组。
## Math对象
*对象属性:var pi = Math.PI;
E 返回算术常量 e,即自然对数的底数(约等于2.718)。
LN2 返回 2 的自然对数(约等于0.693)。
LN10 返回 10 的自然对数(约等于2.302)。
LOG2E 返回以 2 为底的 e 的对数(约等于 1.414)。
LOG10E 返回以 10 为底的 e 的对数(约等于0.434)。
PI 返回圆周率(约等于3.14159)。
SQRT1_2 返回返回 2 的平方根的倒数(约等于 0.707)。
SQRT2 返回 2 的平方根(约等于 1.414)。
*对象方法:MDN文档
Math.min() //求一组数中的最小值
Math.max() //求一组数中的最大值
Math.ceil() 向上舍入
Math.floor() 向下舍入
Math.round() 四舍五入
Math.random() 返回大于0小于1的一个随机数 [0,1)
## Date对象
常用对象方法:
var time=new Date();
哪一年
console.log(time.getFullYear()) // 2021
哪一个月份,月份是从 0 开始数的
console.log(time.getMonth()) // 7 实际是8月
哪一天
console.log(time.getDate()) // 30
哪小时
console.log(time.getHours()) // 22
哪分钟
console.log(time.getMinutes()) // 45
哪秒钟
console.log(time.getSeconds()) // 23
当前日期是一周中的第几天(周日是 0,周六是 6)
console.log(time.getDay()) // 1
得到执行时间到 格林威治时间 的毫秒数 时间戳
console.log(time.getTime()) // 1630334723399
2.拓展库
## Moment.js http://momentjs.cn/
JavaScript日期处理类库
a.Node.js中使用
1.在当前目录下使用node安装moment库
npm install moment --save
2.模块化导入moment
var moment = require('moment');
设置本地语言为中文
require('moment/locale/zh-cn')
moment.locale('zh-cn');
3.根据对应的格式输出当前时间
console.log(moment().format('MMMM Do YYYY, h:mm:ss a'));
//八月 30日 2021, 11:07:46 晚上
b.浏览器中使用
// 可以下载js文件,也可使用对应的cdn文件,bootcdn
<script src="moment.js"></script>
<script>
moment().format();
</script>
c.时间戳转换
console.log(moment(parseInt(1630334723399)).format('YYYY-MM-DD HH:mm:ss'));
//2021-08-30 22:45:23
//有关format的格式,参考http://momentjs.cn/docs/#/displaying/format/
## lodash https://www.lodashjs.com/
解决浅拷贝问题:
var _ = require('lodash');
var obj = {
name:'zhangsan',
age: 18
}
// 使用cloneDeep方法
var obj2 = _.cloneDeep(obj);
obj2.age = 20;
console.log(obj); // { name: 'zhangsan', age: 18 }
console.log(obj2); // { name: 'zhangsan', age: 20 }