length属性 获取字符串的字符数量
charAt(i) 返回给定位置的字符
charCodeAt(i) 返回给定位置字符的编码
indexOf("x") 从前往后找, 查找指定字符所在位置 如果字符不存在,返回-1 有一个数字类型的可选参数,代表 从哪个位置开始查找
lastIndexOf("x") 从后往前找,查找字符所在位置
concat() 作用:将字符串进行拼接的方法,将一个或多个字符串拼接起来,返回值是新字符串,大部分情况使用 +去代替该方法
调用者:str1
参数:str2
返回值:str1+str2
slice() 截取指定字符串 [start,end) 不改变原始值,所以注意使用新变量接受结果
substr()
参数:开始位置from 截取长度length
返回值:字符串
不改变原始值
substring()
trim() 删除字符串前后空格
toUpperCase() 大写
toLowerCase() 小写
var s = "hello"; console.log(s.length); console.log(s.charAt(1)); console.log(s.charCodeAt(1)); console.log(s.indexOf("q")); console.log(s.LastIndexOf("e")); console.log(s.indexOf("e",2)); var s2 = ",world"; console.log(s.concat(s2));//hello,world var s = "helloworld"; console.log(var s1 =s.slice(3,7));//lowo console.log(s.substr(3,7));//lowworld var s = "helloworld"; console.log(s.substring(3,7));//lowo var s = " hello world "; console.log(s.trim()); var s = " hello world "; console.log(s.toUpperCase());//HELLO WORLD var s = "HELLO WORLD" console.log(s.toLowerCase());//hello world
常用方法
Math.min() 作用:返回一组数中的最小值
Math.max() 作用:返回一组数中的最大值
console.log(Math.min(10,9,5,4,2,1,3,251));//1 console.log(Math.max(10,9,5,4,2,1,3,251));//251
Math. ceil() 向上舍入
Math. floor() 向下取舍
console.log(Math.ceil(10.41));//11 console.log(Math.floor(10.41));//10 console.log(Math.floor(10.91));//10
Math.round() 四舍五入
console.log(Math.round(10.91));//11 console.log(Math.round(10.41));//10
Math.random() 返回值是在(0,1)的一个随机数
console.log(Math.random());//随机数
其他方法
abs(num) 绝对值
exp(num) 返回值Math.E的num次幂
log(num) 返回num的自然对数
pow(num,power) 返回num的power次幂
.........
方法
getFullYear() 年份
getYear()
getMonth() 月份 0-11
getDate() 返回 日期中对象的几号
getDay() 星期几 周日 0 周一--周六 1-6
getHours() 返回小时 0-23
getMinutes() 返回分钟数 0-59
getSeconds() 返回秒数 0-59
getMilliseconds() 返回毫秒数
getTime() 时间戳 1970-01-01 00:00:00到现在
toDateString()
toTimeString()
toISOString()
toJSON()
toString()
var str = "2021-09-02"; var date = new Date(str); console.log(date);//当前标准时间 colsole.log(date.getFullYear()); console.log(date.getMonth());//console.log(date.getMonth() + 1); console.log(date.getDate()); console.log(date.getDay()); console.log(date.getHours()); console.log(date.getMinutes()); console.log(date.getSeconds()); console.log(date.getMilliseconds()); console.log(date.getTime()); colsole.log(date.getYear()); console.log(date.valueOf()); console.log(date.toDateString()); console.log(date.toTimeString()); console.log(date.toISOString()); console.log(date.toJSON()); console.log(date.toString());
案例 日期:2021-09-02 10 :25 :40
console.log(dateFMT(new Date())); function dateFMT (date) { // var date = new Date(); var y = date.getFullYear(); var m = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1; var d = date.getDate().toString().padStart(2, "0"); var hh = date.getHours().toString().padStart(2, "0"); var mm = date.getMinutes().toString().padStart(2, "0"); var ss = date.getSeconds().toString().padStart(2, "0"); return y + "-" + m + "-" + d + " " + hh + ":" + mm + ":" + ss; } var moment = require("moment"); var date = new Date(); var result = moment(date).format("YYYY-MM-DD hh:mm:ss"); console.log(result); var date = new Date(); console.log(date.getTime()); var thisTime = date.getTime() var time = moment(thisTime).format("YYYY-MM-DD hh:mm:ss"); console.log(time);
因为使用普通的字面量创建多个对象时,会产生大量的重复代码,为了解决这个问题,我们引入工厂模式。
通过将创建对象的方法封装起来,避免重复代码产生。
function newPerson(name,age,gender){ var p =new Object(); p.name = name; p.age = age; p.gender = gender; p.sayName = function(){ console.log(this.name); } } var p1 = newPerson('zhangsan',12,'男'); var p2 = newPerson('lisi',15,'女'); console.log(p1); console.log(p2); p1.sayName(); p2.sayName(); function newDog(name,age,gender){ var d = new Object(); d.name = name; d.age = age; d.gender = gender; d.sayName = function(){ console.log("汪汪名字是" +this.name); } return d; } var d1 = newDog("旺财",1,"男"); console.log(d1); d1.sayName();//汪汪的名字是旺财 console.log(typeof p1);//obj console.log(typeof d1);//obj
工厂模式创建对象的缺点:创建出来的所有对象类型都是object,没有办法去识别对象到底是Person还是Dog。
function newPerson(name,age,gender){ this.name = name; this.age = age; this.gender = gender; this.sayName = function(){ console.log(this.name); } } var p1 = new Person('terry',23,'男'); p1.sayName(); console.log(p1); console.log(typeof p1);
构造函数问题:
可以区分每个类
每个方法都要在每个实例重新创建一遍,没有必要
虽然可以将方法提取出来,提到全局范围内,然后将引用传递给对象中的函数属性,但是全局函数太多的话,体现不了类的封装性。
function Person(){
};
原型模式特点
对于共享属性 共享函数使用这种方式创建是非常合适的
对于引用类型的数据不太好
function Person(){}; Person.prototype.name = "zhangsan"; Person.prototype.age = 12; Person.prototype.gender = "男"; Person.prototype.sanyName = function(){ console.log(this.name); } var p1 = new Person(); p1.name = "lisi"; p1.likes.push('打