1.写一个函数,返回从min到max之间的 随机整数,包括min不包括max
// 方法1 使用Math.floor()
function getRandomInt1(max, min){
return Math.floor(Math.random()*(max - min)) + min
}
// 方法2 使用Math.ceil()
function getRandomInt2(max, min){
return Math.ceil(Math.random()*(max - min)) + (min - 1)
}
2. 写一个函数,生成一个长度为 n 的随机字符串,字符串字符的取值范围包括0到9,a到 z,A到Z。
function getRandStr(len) {
var strs = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var newStrs = "";
for (var i = 0; i < len; i++) {
var index= Math.floor(Math.random() * strs.length);
newStrs = newStrs + strs[index];
}
return newStrs;
}
var str = getRandStr(10);
console.log(str);
function getRandStr(len) {
var strs = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var newStrs = "";
for (var i = 0; i < len; i++) {
var index= Math.floor(Math.random() * strs.length);
newStrs= newStrs.concat(strs[index]);
}
return newStrs;
}
var str = getRandStr(10); // 0a3iJiRZap
console.log(str);
function getRandStr(len) {
var strs = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var possibleStr = '';
for (var i = 0; i < len; i++) {
//charAt()方法从一个字符串中返回指定的字符,接收一个参数index,一个介于0和字符串长度减1之间的整数
possibleStr += strs.charAt(Math.floor(Math.random() * strs.length));
}
return possibleStr;
}
var str = getRandStr(10);
console.log(str); //如:Irtg95rXBQ
3.写一个函数,生成一个随机 IP 地址,一个合法的 IP 地址为 0.0.0.0~255.255.255.255
function getRandIP() {
var strs = "";
console.log(number);
// return number+"."+number+"."+number+"."+number;
for (var i = 0; i < 4; i++) {
var number = Math.floor(Math.random() * (255 - 0 + 1) + 0);
strs = strs.concat(number, ".")
}
var newStrs = strs.slice(0, strs.length - 2); //移除最后一个 " ."
return newStrs;
}
var ip = getRandIP()
console.log(ip) // 10.234.121.45
function getRandIP(ip) {
var arr = [] // 声明储存IP地址的对象是个数组
for (var i = 0; i < 4; i++) { // 使用for循环来取4次值
var x = Math.floor(Math.random() * 256) //使用floor方法,将0-255的随机整数赋值给x
arr.unshift(x) // 在ip数组中添加刚取到的随机值
}
return arr.join('.')//使用join方法将数组以'.'连接并输出
}
var ip = getRandIP() // 将函数执行完毕的数组赋值给ip
console.log(ip) //
4.写一个函数,生成一个随机颜色字符串,合法的颜色为#000000~ #ffffff
function getRandColor(){
var strs = "0123456789abcdef";
var newStrs = "";
for (var i = 0; i < 6; i++) {
var index= Math.floor(Math.random() * strs.length);
newStrs = newStrs + strs[index];
}
return '#'+newStrs;
}
var color = getRandColor()
console.log(color) // #3e2f1b
function number(min, max) {
var num = Math.floor(Math.random() * (max - min) + min);
return num;
}
function getRandColor() {
var strs = '';
for (var i = 0; i < 6; i++) {
strs += number(0, 16).toString(16);
}
return '#' + strs;
}
var color = getRandColor();
console.log(color) // #3e2f1b
5.实现一个flatten函数,将一个嵌套多层的数组 array(数组) (嵌套可以是任何层数)转换为只有一层的数组,数组中元素仅基本类型的元素或数组,不存在循环引用的情况。
递归
function flatten(arr){
var result=[];
for(var i in arr){
Array.isArray(arr[i])?result=result.concat(flatten(arr[i])):result.push(arr[i]);
}
return result;
}
var arr = [3, [2, -4, [5, 7]], -3, ['aa', [['bb']]]];
var arr2 = flatten(arr)
console.log(arr2)
function flatten(arr) {
return arr.reduce(function (pre, next) {
return pre.concat(Array.isArray(next) ? flatten(next) : next)
}, [])
}
var arr = [3, [2, -4, [5, 7]], -3, ['aa', [['bb']]]];
var arr2 = flatten(arr)
//ES6做法
function flatten(arr){
var newArr = []
function _flat(arr){
arr.forEach(val=>{
if(Array.isArray(val)){
_flat(val)
}else{
newArr.push(val)
}
})
}
_flat(arr)
return newArr
}
var arr = [3, [2, -4, [5, 7]], -3, ['aa', [['bb']]]];
var arr2 = flatten(arr);
console.log(arr2);
6.实现一个reduce函数,作用和原生的reduce类似 Ex:var sum = reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0); => 6
function reduce(arr, iteratee, initValue){
var tmpArr = (initValue === undefined ? [] : [initValue]).concat(arr)
while(tmpArr.length > 1){
tmpArr.splice(0, 2, iteratee(tmpArr[0], tmpArr[1]))
}
return tmpArr[0]
}
var sum = reduce([3,5], function(v1, v2){
return v1 * v2
},4)
console.log(sum)
7.写一个函数getChIntv,获取从当前时间到指定日期的间隔时间
function getChIntvl(time){
return Date.now()-Date.parse(time);
}
var str = getChIntv("2017-02-08 10:30:24");
console.log(str);
8.写一个函数,参数为时间对象毫秒数的字符串格式,返回值为字符串。假设参数为时间对象毫秒数t,根据t的时间分别返回如下字符串:
- 刚刚( t 距当前时间不到1分钟时间间隔)
- 3分钟前 (t距当前时间大于等于1分钟,小于1小时)
- 8小时前 (t 距离当前时间大于等于1小时,小于24小时)
- 3天前 (t 距离当前时间大于等于24小时,小于30天)
- 2个月前 (t 距离当前时间大于等于30天小于12个月)
- 8年前 (t 距离当前时间大于等于12个月)
function getFriendlyDate(timeStr){
var interval = Date.now() - parseInt(timeStr)
var ch = interval > 0 ? '前': '后'
var str
interval = Math.abs(interval)
switch (true){
case interval < 60*1000:
str = '刚刚'
break
case interval < 60*60*1000:
str = Math.floor(interval/(60*1000)) + '分钟' + ch
break
case interval < 24*60*60*1000:
str = Math.floor(interval/(60*60*1000)) + '小时' + ch
break
case interval < 30*24*60*60*1000:
str = Math.floor(interval/(24*60*60*1000)) + '天' + ch
break
case interval < 12*30*24*60*60*1000:
str = Math.floor(interval/(30*24*60*60*1000)) + '个月' + ch
break
default:
str = Math.floor(interval/(12*30*24*60*60*1000)) + '年' + ch
}
return str
}
console.log( getFriendlyDate('1505122360640') ) //"7分钟前"
console.log( getFriendlyDate('1503122360640') ) //"23天前"
console.log( getFriendlyDate('1203122360640') ) //"9年前"
console.log( getFriendlyDate('1508122360640') ) //"1个月后"
9.String方法
charAt(index):返回字符
charCodeAt(index):返回字符编码
"string1".concat("string2","string3",...):返回字符串
slice(起始位置,终止位置(不包含)):返回字符串,可以负数
substring(起始位置,终止位置(不包含)):返回字符串,可以负数
substr(起始位置,长度):返回字符串,从起始位置算起的长度
indexOf(char,index):(从index开始查找),返回索引的值
lastIndexOf(char,index):(从index开始查找),返回索引的值
trim():删除前置和后置的所有空格
toUpperCase():大写
toLowerCase():小写
match(/reg/或者RegExp对象):返回一个数组
serach(/reg/或者RegExp对象):返回索引
replace(字符串或者/reg/或者RegExp对象 , 字符串或者函数function(match,pos,originalText){}):
split(separator,limit):separator可选。字符串或正则表达式,从该参数指定的地方分割 string Object。limit可选。该参数可指定返回的数组的最大长度。如果设置了该参数,返回的子串不会多于这个参数指定的数组。如果没有设置该参数,整个字符串都会被分割,不考虑它的长度。
,返回数组"string1".localCompare("string2"):比较字符串,大于返回1,等于返回0,小于返回-1
fromCharCode(101,12,334,45):接收字符编码返回对应的字符串
10.Date的静态方法
- Date.parse():
parse方法用来解析日期字符串,返回距离1970年1月1日 00:00:00的毫秒数
Date.parse("January 26, 2011 13:51:50")
Date.parse("Mon, 25 Dec 1995 13:30:00 GMT")
Date.parse("Mon, 25 Dec 1995 13:30:00 +0430")
Date.parse("2011-10-10")
Date.parse("2011-10-10T14:48:00")
1318229280000
- Date.UTC():Date对象返回的都是当前时区的时间
Date.UTC方法可以返回UTC时间。该方法接受年、月、日等变量作为参数,返回当前距离1970年1月1日 00:00:00 UTC的毫秒数
Date.UTC(2015,0,1,2,3,4,567); //1420077784567
- Date.now():now方法返回当前距离1970年1月1日00:00:00的毫秒数
Date.now(); // 1427974222853
- Date():返回当前时间的字符串
Date();//"Tue Sep 12 2017 11:48:46 GMT+0800 (中国标准时间)"
- new Date(year, month [, day, hours, minutes, seconds, ms]):返回对应时间,在多个参数的情况下,Date对象将其分别视作对应的年、月、日、小时、分钟、秒和毫秒。如果采用这种用法,最少需要指定两个参数(年和月),其他参数都是可选的,默认等于0。如果只使用年一个参数,Date对象会将其解释为毫秒数。
new Date();// Tue Sep 12 2017 11:49:36 GMT+0800 (中国标准时间)
------------------
new Date("2013-02-15")
new Date("2013-FEB-15")
new Date("FEB, 15, 2013")
new Date("FEB 15, 2013")
new Date("Feberuary, 15, 2013")
new Date("Feberuary 15, 2013")
new Date("15, Feberuary, 2013") //Fri Feb 15 2013 00:00:00 GMT+0800 (中国标准时间)
------------------------------
new Date(2013) // Thu Jan 01 1970 08:00:02 GMT+0800 (CST)
new Date(2013,0) // Tue Jan 01 2013 00:00:00 GMT+0800 (CST)
new Date(2013,0,1) // Tue Jan 01 2013 00:00:00 GMT+0800 (CST)
new Date(2013,0,1,0) // Tue Jan 01 2013 00:00:00 GMT+0800 (CST)
new Date(2013,0,1,0,0,0,0) // Tue Jan 01 2013 00:00:00 GMT+0800 (CST)
- get:
Date.prototype.getTime():返回实例对象距离1970年1月1日00:00:00对应的毫秒数,等同于valueOf方法
Date.prototype.getDate():返回实例对象对应每个月的几号(从1开始)
Date.prototype.getDay():返回星期,星期日为0,星期一为1,以此类推
Date.prototype.getFullYear():返回四位的年份
Date.prototype.getMonth():返回月份(0表示1月,11表示12月)
Date.prototype.getHours():返回小时(0-23)
Date.prototype.getMilliseconds():返回毫秒(0-999)
Date.prototype.getMinutes():返回分钟(0-59)
Date.prototype.getSeconds():返回秒(0-59)
Date.prototype.getTimezoneOffset():返回当前时间与UTC的时区差异,以分钟表示,返回结果考虑到了夏令时因素
- set:
Date.prototype.setDate(date):设置实例对象对应的每个月的几号(1-31),返回改变后毫秒时间戳
Date.prototype.setFullYear(year [, month, date]):设置四位年份
Date.prototype.setHours(hour [, min, sec, ms]):设置小时(0-23)
Date.prototype.setMilliseconds():设置毫秒(0-999)
Date.prototype.setMinutes(min [, sec, ms]):设置分钟(0-59)
Date.prototype.setMonth(month [, date]):设置月份(0-11) -
Date.prototype.setSeconds(sec [, ms]):设置秒(0-59)
Date.prototype.setTime(milliseconds):设置毫秒时间戳
- Date.prototype.toString():
- Date.prototype.toString():
- Date.prototype.toTimeString():
- toLocalDateString():
- toLocalTimeString():
- Date.prototype.toUTCString():
- Date.prototype.toISOString():
11.Math属性
Math.E // 2.718281828459045
Math.LN2 // 0.6931471805599453
Math.LN10 // 2.302585092994046
Math.LOG2E // 1.4426950408889634
Math.LOG10E // 0.4342944819032518
Math.PI // 3.141592653589793
Math.SQRT1_2 // 0.7071067811865476
Math.SQRT2 // 1.4142135623730951
12.Math方法
- min():最小值
- max():最大值
找到数组的最大值
var values=[1,2,3,4,5,6,7,8];
var max=Math.max.apply(Math,values)
console.log(max); //8
- ceil():ceil方法返回大于参数值的最小整数
- floor():floor方法返回小于参数值的最大整数
- round():四舍五入
- pow(2,3):幂运算
- sqrt(4):开方运算
- log(100):以e为底的对数运算
- exp(1):返回常数e的参数次方
求以10为底的对数,可以除以Math.LN10;求以2为底的对数,可以除以Math.LN2。
Math.log(100)/Math.LN10 // 2
Math.log(8)/Math.LN2 // 3
- 三角函数
Math.sin(0) // 0
Math.cos(0) // 1
Math.tan(0) // 0
Math.asin(1) // 1.5707963267948966
Math.acos(1) // 0
Math.atan(1) // 0.7853981633974483
- random():该方法返回0到1之间的一个伪随机数,可能等于0,但是一定小于1
// 返回给定范围内的随机数
function getRandomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
// 返回给定范围内的随机整数
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min; //包含min,max
}