#hello,JS:06-5 Math / Date

一、字符串

1、单双引号(实际无区别)

特别场景下,单引号更严格。如:

"It's a long journey"

2、转义字符

就是在内部不能转化的单、双引号前面加上反斜杠,用来转义,成为一个完整的字符串

var str = 'he\'llo'
--> undefined
str
--> "he'llo"

//展示长度
str.length
--> 6

//展示斜杠
var str = "\\ccc"
--> undefined
str
--> "\ccc"

//展示换行
//例子1:
var longString = "Long \  //注:注意不要多出空格,会报错
long \
long \
string";
--> undefined
longString
--> "Long long long string"

----------------------------------
var longString = 'Long '
  + 'long '
  + 'long '
  + 'string';
--> undefined
longString
--> "Long long long string"

//例子2:
var a = 'hel \
\
lo'
--> undefined
a
"hel lo"

---------------------------------

var a = 'hel\
\
lo'
--> undefined
a
--> "hello"

//例子3:ES6用法
`
hello
world
`
--> "
    hello
    world
    "

3、字符串常见用法

(1)长度计算、连接

//计算
var str = "hello"
--> undefined
str.length
--> 5
str[0]
--> "h"
str[str.length - 1]
--> "o"
str.charAt(0)  //截取字符串的首字母
--> "h"
str.charCodeAt(0) //获取Ascii 码
--> 104

//连接
var str2 = "world" 
--> undefined
var str1 = "hello " //在测试时,发现字符串里空格,字符串内部相应地会出现间隙
--> undefined
var str3 = str1 + str2
--> undefined
str3
--> "hello world"

(2)字符串截取

var str = "hello world"
--> undefined
str.substr(1, 3) 
--> "ell"   //第一个是开始位置, 第二个是长度  ell
str.substring(1, 3)
--> "el"    //第一个是开始位置,第二个是结束位置,长度为第二个-第一个  el

(3)字符串查找

var str = "hello my world";
--> undefined
str.search('my')
--> 6
str.replace('my', 'your')
--> "hello your world"
str.match('my')
--> ["my", index: 6, input: "hello my world", groups: undefined]

//查找位数:ES6中的用法
str.indexOf('el')
--> 1

(4)字符串的大小写

var str = "Hello";
--> undefined
str.toUpperCase()
--> "HELLO"
 str.toLowerCase()
--> "hello"

(5)字符串的拼接

var color = 'red'
--> undefined
str = '衣服的颜色是' + color
--> "衣服的颜色是red"
str2 = `今天的颜色很${color}`
--> "今天的颜色很red"

二、Math(JS内置对象)

1、概念

看了一下概念,看懂了不懂怎么说,就是用Math提供一种数学计算方法:

如图:
image

2、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
如:
Math.PI*3*3
--> 28.274333882308138

3.日常使用Math

建议理解透每个属性用法,自己做题默念用法规则,在控制台验证自己的结果

(1)round 用于四舍五入
语法:

Math.round()

对于负值的运算结果与正值不太一样,主要集中于.5的处理上
如:

Math.round(-4.6) //-5
Math.round(-4.5) //-4
Math.round(-1.5) //-1
Math.round(-0.5) //-0

而正值

Math.round(0.5) //1
Math.round(1.5) //2
Math.round(4.5) //5
Math.round(4.8) //5

(2)abs 返回参数值的绝对值

Math.abs()

(3)max/min 返回最大参数/最小参数

Math.max()
Math.min()

一些例子:

Math.max(4, -1, 's')  //NaN
Math.max.apply(null,[-2,-9,2,6]) //6
Math.min.apply(null,[-2,-9,2,6]) // -9

(4)floor/ceil
A、floor 返回小于参数值的最大整数 不等于 取整
如:

Math.floor(3.8)  //3
Math.floor(3.5)  //3
Math.floor(3.2)  // 3
Math.floor(-3.2) // -4  
Math.floor(-3.5) //-4
Math.floor(-3.8) //-4

B、ceil 返回大于参数值的最小整数

Math.ceil(3.8)  //4
Math.ceil(3.5)  //4
Math.ceil(3.2)  // 4
Math.ceil(-3.2) //-3 
Math.ceil(-3.5) //-3
Math.ceil(-3.8) //-3

(3)pow/sqrt

  • pow 用于求平方
Math.pow(2, 2) // 4
Math.pow(2, 3) // 8
  • sqrt 用于求参数的平方根(即参数包含在这种√ ̄中的值)
Math.sqrt(4) // 2   相当于√4 ̄=2
Math.sqrt(-4) // NaN

**(4)log/exp
log 用于返回以e为底的自然对数值
普及一下对数函数:
如果ax=N(a>0,且a≠1),那么数x叫做以a为底N的对数,记作x=logaN,读作以a为底N的对数,其中a叫做对数的底数,N叫做真数。
Math.log(Math.E) // 1
exp 用于返回常数e的参数次方

Math.exp(1) // 2.718281828459045  //10÷e
Math.exp(3) // 20.085536923187668  

【重点】(5)random 用于求随机数,返回0到1之间的一个伪随机数,可能等于0,但是一定小于1。如你输入Math.random( ),任何时候都会生成按照以上规则组成的随机数
实践0:返回给定范围内的随机数

function getRandomArbitrary(min, max) {
  return Math.random() * (max - min) + min;
}

实践1: 均为随机

  • 获取一个0-100的整数


    image
  • 获取一个0-5之间的整数


    image
  • 获取一个1-6之间的整数


    image
  • 获取一个10-20之间的整数


    image

实践2: 获取一个随机的字符串

function randomStr(len){
    var str = '' //第3步
    var dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_'   //第4步
    for(var i= 0; i<len; i++){ //用来执行次数
       var index = Math.floor(Math.random()*dict.length)//通过Math.floor来取整  //用来获取随机长度的整数值
       str += dict[index]  
    } //第5步
   return str//第6步
  
}//第1步:定义一个随机字符串长度,空

var str = randomStr(32)
console.log(str) //第2步:定义str具体值(注:这个随机字符串包括大小写字母数字等等)

图:


image

可以在控制台算一下所声明的 dict随机字符串有多少位

var dict = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_'
--> undefined
dict.length
--> 63

//基本需要的是下标为0-62的随机参数

实践3: 获取一个随机IP
写一个函数,生成一个随机 IP 地址,一个合法的 IP 地址0.0.0.0~255.255.255.255

function getRandIP(){
  var ip = []
  for(var i = 0;i<4;i++){   //i<4是由于下标位数
     ip = ip+Math.floor(Math.random()*256)+"."
     }
return ip 
  }
var ip = getRandIP()
console.log(ip) // 输出ip地址
或
function getRandIP()
{
    var temp = 0;
    ip = '';
    for (var i = 0; i < 4; i++)
    {
        temp = parseInt(Math.random() * 256);
        if (i < 3) 
        {
            ip = ip + temp + '.';           
        }
        else
        {
            ip = ip + temp
        }
    }
    return ip;
}
var ip = getRandIP()
console.log(ip)  //输出ip地址

实践4: 获取一个随机颜色字符串
写一个函数,生成一个随机颜色字符串,合法的颜色为#000000~#ffffff

function getRandColor(){
    var str ='#'
    var dict ='0123456789abcdef'
    for(var i= 1;i<6 ;i++){
         var index = Math.floor(Math.random()*dict.length)
         str += dict[index] //str = str+dict[index]
}
 return str
}
var color = getRandColor()
console.log(color) 

三、Date(JS的内置对象)

1、定义:

是JavaScript提供日期和时间的操作接口

2、Date的几个静态方法:

(1)Date.now( ) ——获取时间毫秒数
如:

Date.now()
--> 1528904474005  //根据实际时间得出的毫秒数也不一样

now方法返回的毫秒数,具体指的是距离1970年1月1日00:00:00的毫秒数

**Date.parse( ) **

注:如果解析失败,返回NaN
如:

Date.parse(2011-11-11)
--> 599616000000

(2)new Date( )
A、通过new date方法,获取一个时间对象

new Date(2020,8,14)  
--> Mon Sep 14 2020 00:00:00 GMT+0800 (CST)

通过字符串所生成的时间对象(且没有传递时分秒),获取的则是日期,而对于处于东八区的我们则是8点

str ='2017-08-01'
--> "2017-08-01"
new Date(str)
--> Tue Aug 01 2017 08:00:00 GMT+0800 (CST)

str ='2017-08-01 00:00:00'
--> "2017-08-01 00:00:00"
new Date(str)
--> Tue Aug 01 2017 00:00:00 GMT+0800 (CST)

B、声明一个变量d,d则是一个日期对象,返回的则是一个字符串,如:

var d = new Date()
--> undefined
d
--> Thu Jun 14 2018 00:08:31 GMT+0800 (CST) //字符串,实际时间有所不同
typeof d
--> "object"  //验证为一个对象

通过变量d,一个对象,获取一些必要信息,如:

d.getDate()
--> 14
d.getFullYear()
--> 2018
d.getMonth()
--> 5
d.getDay()
--> 4
d.getHours()
--> 0
d.getMinutes()
--> 8
d.getSeconds()
--> 31
d.getMilliseconds()
--> 438

3、实践:

(1)实践1:100天前是几月几号?
注:当前时间为:2018.6.19 周二 时间大概:15:24:35(时间误差不到3-5mins)

var curTime = Date.now()  //计算当前时间的时间毫秒数
--> undefined
new Date(curTime-100*24*60*60*1000)
--> Sun Mar 11 2018 15:23:02 GMT+0800 (中国标准时间) //获取100天以前的具体日期
new Date(curTime-100*24*60*60*1000).getMonth()
--> 2
new Date(curTime-100*24*60*60*1000).getDate()
--> 11

(2)实践2:复杂函数的执行时间如何计算?

var start = Date.now()
--> undefined
var end =Date.now()
--> undefined
end - start
--> 5196

**(3)实践3:
写一个函数,参数为时间对象毫秒数的字符串格式,返回值为字符串(即输出打印出时间戳)。假设参数为时间对象毫秒数t,根据t的时间分别返回如下字符串:

  • 刚刚( t 距当前时间不到1分钟时间间隔)
  • 3分钟前 (t距当前时间大于等于1分钟,小于1小时)
  • 8小时前 (t 距离当前时间大于等于1小时,小于24小时)
  • 3天前 (t 距离当前时间大于等于24小时,小于30天)
  • 2个月前 (t 距离当前时间大于等于30天小于12个月)
  • 8年前 (t 距离当前时间大于等于12个月)
function friendlyDate (time) {
    var t = new Date().getTime();
    var d = (t-time)/1000;
    switch(true){
        case d < 60:
        console.log('刚刚');
        break;
        case d >=60 && d<60*60:
        console.log(Math.floor(d/60)+'分钟前');
        break;
        case d >=3600 && d<3600*24:
        console.log(Math.floor(d/3600)+"小时前");
        break;
        case d >=3600*24 && d<3600*24*30:
        console.log(Math.floor(d/3600/24)+"天前");
        break;
        case d >=3600*24*30 && d<3600*24*30*12:
        console.log(Math.floor(d/3600/24/30)+"月前");
        break;
        default:
        console.log(Math.floor(d/3600/24/30/12)+"年前");
        break;
    }
}
var str = friendlyDate(Date.now()-1000*60);
console.log(str);
var str2 = friendlyDate('1483941245793');
console.log(str2);
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容