面向对象的程序设计
1.内置对象及内置函数
1.1.基本包装类型
在 ES 中,数据的分类分为基本数据类型和引用类型。
按照最新 ES 标准定义,基本数据类型(primitive value)包括 Undefined, Null, Boolean, Number, Symbol, String。
为了便于操作基本类型值,ECMAScript提供了3个特殊引用类型(基本包装类型):Boolean, Number, String。
基本包装类型,和其他引用类型一样,拥有内置的方法可以对数据进行额外操作。
每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型对
象,从而可以调用一些方法操作这些数据。
//包装器函数
/**
* 特殊引用数据类型 Boolean Number String
* 1.js自动将基本数据类型转为特殊引用数据类型 String---自动装箱
* 2.实例可以访问属性和方法
* 3.调用js将特殊引用数据类型转为基本数据类型string---自动拆箱
*
*/
var str = 'hello';
var res = str.split('');
console.log(res,str.length,str.constructor);
// var str = new String('hello');
// str.split('');
// str = null;
增加对应的包装对象的原型方法
// 想要给基本数据类型添加方法或者属性
var str = 'hello';
String.prototype.last = function(){
// charAt 返回指定位置所对应得字符
return this.charAt(this.length-1);
};
console.log(str.last());
var str = new String('hello');
// 添加属性 和 方法
str.name = 'HI';
str.foo = function(){
console.log('我是foo');
}
console.log(str);
1.1.1.Boolean类型
Boolean 类型没有特定的属性或者方法。一般直接将Boolean当做一个工具方法来使用。
1.1.2.Number类型
/**
* Number引用类型方法和属性
*/
var num = 10;
console.log(num.toString());
console.log(num.toLocaleString());
console.log(num.toFixed(2));
console.log(num.toExponential());
console.log(num.toPrecision(2));
console.log(num.valueOf());
1.1.3.String类型
/**
* charAt 参数:index 返回值:返回指定索引位置对应的字符
* charCodeAt 参数:index 返回值:返回指定索引位置对应的字符得Unicode编码
*/
var str = 'hello';
console.log(str.charAt(3));
console.log(str.charCodeAt(3));
/**
* 字符串操作方法:
* concat 拼接字符串 返回值:返回的是拼接好的字符串
*/
var str = 'he';
var str1 = 'll';
var str2 = 'o';
var res = str.concat(str1,str2);
console.log(res);
/**
* 截取字符串字符
* 1.substring 参数:start end(不包含)不可以为负数 返回值:从start截取到end位置字符(不包含)
* 2.substr 参数:start length 返回值:从start位置开始截取length个字符
* 3.slice 参数:start end(不包含)可以为负数 返回值:从start截取到end位置字符(不包含)
*/
var str = 'hello world';
console.log(str.slice(3,7));//截取从索引3到索引7位置字符(不包含)
console.log(str.slice(-3,-1));//截取从倒数第三项到倒数第一项位置字符(不包含)
console.log(str.substring(3,7));//截取从索引3到索引7位置字符(不包含)
console.log(str.substr(3,7));
/**
* indexOf 从头开始查找字符
* lastIndexOf 从末尾开始查找字符
* 参数:查找字符 start 返回值:返回的第一次查找到字符得索引或者-1
*/
var str = 'hello world';
console.log(str.indexOf('l',4));
console.log(str.lastIndexOf('o',6));
/**
* 大小写转换方法
* toLowerCase 将字符串转为小写
* toUpperCase 将字符串转为大写
*/
console.log('HEELO'.toLowerCase());
console.log('hello'.toUpperCase());
console.log('hello'.toLocaleUpperCase());
console.log('HEELO'.toLocaleLowerCase());
/**
* 字符串模式匹配得方法 可以配合正则表达式
* match 参数:要匹配得字符 返回值:返回的是一个数组或者null
* replace 参数:旧字符/正则表达式 新字符 返回值:返回的是替换好的新字符串
* search 参数:要查询得字符 返回值:返回查找到得字符所对应索引或者-1
* split 参数('分割字符') 返回值:将字符串分割好的数组
*/
/**
* 创建正则表达式
* 1.构造函数 RegExp()
* 2.直接字面量 /表达式/修饰符
* 修饰符 i ignore忽略大小写 g global 全局匹配 m mutiline多行匹配
*/
// var reg = new RegExp('l','igm');
// var reg = /l/igm;
var str = 'hello world';
console.log(str.match('y'));
console.log(str.replace('l','m'));
console.log(str.replaceAll('l','m'));//将所有旧字符全部替换为新字符
console.log(str.replace(reg,'m'));
console.log(str.search('o'));
console.log(str.split(' '));
1.2.Math对象
// Math对象方法
console.log(Math.min(1,3,2,4,5,6),'获取一组数中最小数');
console.log(Math.max(1,3,2,4,5,6),'获取一组数中最大数');
console.log(Math.ceil(1.1),'向上取整');
console.log(Math.floor(1.9),'向下取整');
console.log(Math.round(2.1),'四舍五入');
console.log(Math.round(2.9),'四舍五入');
console.log(Math.random(),'随机数0-1之间小数');//[0,1)
var arr = ['甄姬','虞姬','蒙牙','上官婉儿','典韦','韩信'];
function Random(arr){
// 生成随机索引 0-6之间
var index = parseInt(Math.random() * arr.length);
console.log(arr[index]);
}
Random(arr)
1.3.Date对象
//date对象
// 1.引入momentjs工具库 commonjs 模块化规范
var moment = require('moment');
console.log(moment,'moment对象');
// var now = new Date();//在不同环境下获取时间有差异
// var now = new Date('2023-8-22 14:34');
var now = new Date();//在不同环境下获取时间有差异
console.log(now.toString());
console.log(now.toLocaleString());
console.log(now.getFullYear(),'获取当前年份');
console.log(now.getMonth() + 1,'获取当前月份');//0-11
console.log(now.getDate(),'获取月份所对应天数');
console.log(now.getHours(),'获取当前小时');
console.log(now.getMinutes(),'获取当前分钟数');
console.log(now.getSeconds(),'获取当前秒数');
console.log(now.getDay(),'获取一周中几天');//0-6
console.log(now.getTime());//格林威治时间毫秒数 13位时间戳
console.log(moment(now.getTime()).format('YYYY-MM-DD:HH:mm:ss'));
2.扩展库
a.Moment.js
b.lodash
// 引入lodash工具库
// var _ = require('lodash');
// console.log(_);
// var obj = {
// name:"zhangsan"
// };
// var obj1 = _.cloneDeep(obj);//深拷贝
// console.log(obj,obj1,obj1===obj);
// var arr = [1,2,3,4,5,6];
// console.log(_.chunk(arr,2));
// compact 过滤假值将真值放在数组中
// var arr = [0,false,'',10,null,undefined,'hello'];
// console.log(_.compact(arr));
// drop 删除数组元素 指定删除n
// console.log(_.drop([1,2,3,4,5],2));
// console.log(_.indexOf([1,2,3,4,5],3));
// console.log(_.uniq([1,2,2,1,3]));
// 作业:尽可能使用学过数组api对数组进行去重 [1,2,3,2,3]
// var arr = [1,2,3,2,3];
// function unique(arr) {
// //循环前一个数
// for (let i = 0; i < arr.length; i++) {
// //循环后一个数
// for (let j = i+1; j < arr.length; j++) {
// //如果前一项和后一项重复 删除后一项 修正下标
// if (arr[i]===arr[j]) {
// arr.splice(j,1);
// j--;
// }
// }
// }
// return arr
// }
// var res = unique(arr)
// console.log(res);
/**
* 利用indexOf去重 或者 lastIndexOf去重
*/
var arr = [1,2,3,2,1,3,4];
function unique(arr) {
var newArr = [];
for (let i = 0; i < arr.length; i++) {
//如果不存在newArr中 将添加newArr数组
if (newArr.indexOf(arr[i]===-1)) {
// newArr.push(arr[i])
newArr[newArr.length]=arr[i]
}
}
return newArr
}
var res = unique(arr);
console.log(res);