JavaScript 字符串 & Math & Date
字符串
字符串就是零个或多个排在一起的字符,放在单引号或双引号之中。
'abc' "abc"
单引号字符串的内部,可以使用双引号。双引号字符串的内部,可以使用单引号。
'key="value"' "It's a long str"
多行与转义
如果要在单引号字符串的内部,使用单引号(或者在双引号字符串的内部,使用双引号),就必须在内部的单引号(或者双引号)前面加上反斜杠,用来转义。
'Did she say \'Hello\'?' // "Did she say 'Hello'?" "Did she say \"Hello\"?" // "Did she say "Hello"?"
字符串默认只能写在一行内,分成多行将会报错。
'a b c' // SyntaxError: Unexpected token ILLEGAL
上面代码将一个字符串分成三行,JavaScript就会报错。
如果长字符串必须分成多行,可以在每一行的尾部使用反斜杠。
var longString = "Long \ long \ long \ string"; longString // "Long long long string"
上面代码表示,加了反斜杠以后,原来写在一行的字符串,可以分成多行,效果与写在同一行完全一样。注意,反斜杠的后面必须是换行符,而不能有其他字符(比如空格),否则会报错。
连接运算符(+)可以连接多个单行字符串,用来模拟多行字符串。
var longString = 'Long ' + 'long ' + 'long ' + 'string';
反斜杠在字符串内有特殊含义,用来表示一些特殊字符,所以又称为转义符。
如果字符串的正常内容之中,需要包含反斜杠,则反斜杠前需要再加一个反斜杠,用来对自身转义。
var path = "C:\\games\\war3\\"
ES6扩展
多行字符串
var str = ` 你好 我是evenyao `
字符串模板
var name = 'evenyao' var website = 'github.com/evenyao' var str = `你好, 我是${name},${website}` //"你好, 我是evenyao,github.com/evenyao"
常见的字符串方法
- 长度计算,连接
var str = "hello"; console.log( str.length ); console.log( str[0] ); console.log( str[str.length - 1] ); console.log( str.charAt(0) ); console.log( str.charCodeAt(0) ); var str2 = " world"; var str3 = str1 + str2; cosnole.log( str3 );
- 字符串截取
var str = "hello world"; var sub1 = str.substr(1, 3); // 第一个是开始位置, 第二个是长度 ell var sub2 = str.substring(1, 3); // 第一个是开始位置,第二个是结束位置,长度为第二个-第一个 el var sub3 = str.slice(1, 3); // 同上 允许负参
字符串操作不会修改原来的字符串
- 查找
var str = "hello my world"; var s1 = str.search('my'); //6 找不到为-1 var s2 = str.replace('my', 'your'); // var s3 = str.match('my'); //返回匹配的数组
- 大小写
var str = "Hello"; str.toUpperCase(); str.toLowerCase();
字符串操作不会修改原来的字符串
Math
Math对象是JavaScript的内置对象,提供一系列数学常数和数学方法。Math对象只提供了静态的属性和方法,所以使用时不用实例化
属性
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
方法
round
round方法用于四舍五入
Math.round(0.1) // 0 Math.round(0.5) // 1
它对于负值的运算结果与正值略有不同,主要体现在对.5的处理
Math.round(-1.1) // -1 Math.round(-1.5) // -1
abs,max,min
abs方法返回参数值的绝对值
Math.abs(1) // 1 Math.abs(-1) // 1
max方法返回最大的参数,min方法返回最小的参数
Math.max(2, -1, 5) // 5 Math.min(2, -1, 5) // -1
floor,ceil
floor方法返回小于参数值的最大整数
Math.floor(3.2) // 3 Math.floor(-3.2) // -4
ceil方法返回大于参数值的最小整数
Math.ceil(3.2) // 4 Math.ceil(-3.2) // -3
pow,sqrt
pow方法返回以第一个参数为底数、第二个参数为幂的指数值
Math.pow(2, 2) // 4 Math.pow(2, 3) // 8
sqrt方法返回参数值的平方根。如果参数是一个负值,则返回NaN
Math.sqrt(4) // 2 Math.sqrt(-4) // NaN
log,exp
log方法返回以e为底的自然对数值
Math.log(Math.E) // 1 Math.log(10) // 2.302585092994046
求以10为底的对数,可以除以Math.LN10;求以2为底的对数,可以除以Math.LN2。
Math.log(100)/Math.LN10 // 2 Math.log(8)/Math.LN2 // 3
exp方法返回常数e的参数次方
Math.exp(1) // 2.718281828459045 Math.exp(3) // 20.085536923187668
random
参考:
该方法返回0到1之间的一个伪随机数,可能等于0,但是一定小于1
Math.random() // 0.7151307314634323
// 返回给定范围内的随机数 function getRandomArbitrary(min, max) { return Math.random() * (max - min) + min; } // 返回给定范围内的随机整数 function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }
三角函数
sin方法返回参数的正弦,cos方法返回参数的余弦,tan方法返回参数的正切。
Math.sin(0) // 0 Math.cos(0) // 1 Math.tan(0) // 0
asin方法返回参数的反正弦,acos方法返回参数的反余弦,atan方法返回参数的反正切。这三个方法的返回值都是弧度值。
Math.asin(1) // 1.5707963267948966 Math.acos(1) // 0 Math.atan(1) // 0.7853981633974483
Date
时间的表示方式
GMT
是指位于英国伦敦郊区的皇家格林尼治天文台当地的标准时间,因为本初子午线被定义为通过那里的经线。
自1924年2月5日开始,格林尼治天文台负责每隔一小时向全世界发放调时信息。
理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。但由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能与实际的太阳时有误差,最大误差达16分钟。原因在于地球每天的自转是有些不规则的,而且正在缓慢减速,因此格林尼治时间基于天文观测本身的缺陷,已经被原子钟报时的协调世界时(UTC)所取代。
UTC
协调世界时(英语:Coordinated Universal Time,法语:Temps Universel Coordonné,简称UTC)是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间。中华民国采用CNS 7648的《资料元及交换格式–资讯交换–日期及时间的表示法》(与ISO 8601类似)称之为世界协调时间。*采用ISO 8601:2000的国家标准GB/T 7408-2005《数据元和交换格式 信息交换 日期和时间表示法》中亦称之为协调世界时
CST
北京时间,又名中国标准时间,是*的标准时间,比世界协调时快八小时(即UTC+8),与香港、澳门、台北、吉隆坡、新加坡等地的标准时间相同。
Javascript 中的 Date
var d = new Date() console.log(d.toString()) //"Wed Feb 28 2018 17:18:26 GMT+0800 (CST)" console.log(d.toGMTString()) //"Wed, 28 Feb 2018 09:18:26 GMT" console.log(d.toUTCString()) //"Wed, 28 Feb 2018 09:18:26 GMT" console.log(d.toISOString()) //"2018-02-28T09:18:26.967Z"
new Date()
使用Date构造函数创建一个Date的实例
var d = new Date() d.getTime() //返回实例对象距离1970年1月1日00:00:00对应的毫秒数 d.getDate() //返回实例对象对应每个月的几号(从1开始) d.getDay() //返回星期,星期日为0,星期一为1,以此类推 d.getFullYear() //返回四位的年份 d.getMonth() //返回月份(0表示1月,11表示12月) d.getHours() //返回小时(0~23) d.getMilliseconds() //返回毫秒(0-999) d.getMinutes() //返回分钟(0-59) d.getSeconds() //返回秒(0-59) var d2 = new Date() d2.setDate()
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()
toString方法返回一个完整的时间字符串
var today = new Date(); today.toString(); // "Fri Apr 03 2015 11:17:29 GMT+0800 (CST)"
Date.prototype.toUTCString(),Date.prototype.toISOString()
toUTCString方法返回对应的UTC时间,也就是比北京时间晚8个小时。toISOString方法返回对应时间的ISO8601写法。
var today = new Date(1362790014000); today.toUTCString(); // today.toISOString(); //
Date.prototype.toDateString(),Date.prototype.toTimeString()
toDateString方法返回日期的字符串形式,toTimeString方法返回时间的字符串形式。
var today = new Date(1362790014000); today.toDateString(); // "Fri Apr 03 2015" today.toTimeString(); // "11:17:29 GMT+0800 (CST)"
toLocalDateString, toLocalTimeString
toLocalDateString方法返回一个字符串,代表日期的当地写法
toLocalTimeString方法返回一个字符串,代表时间的当地写法
var today = new Date(1362790014000); today.toLocaleDateString(); // "2015/4/3" today.toLocaleTimeString(); // "上午11:17:29"
new Date(milliseconds)
Date对象接受从1970年1月1日00:00:00 UTC开始计算的毫秒数作为参数。这意味着如果将Unix时间戳作为参数,必须将Unix时间戳乘以1000。
new Date(1378218728000); // Tue Sep 03 2013 22:32:08 GMT+0800 (CST) // 1970年1月2日的零时 var Jan02_1970 = new Date(3600*24*1000); // Fri Jan 02 1970 08:00:00 GMT+0800 (CST)
new Date(datestring)
Date对象还接受一个日期字符串作为参数,返回所对应的时间。所有可以被Date.parse()方法解析的日期字符串,都可以当作Date对象的参数
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")
new Date(year, month [, day, hours, minutes, seconds, ms])
在多个参数的情况下,Date对象将其分别视作对应的年、月、日、小时、分钟、秒和毫秒。如果采用这种用法,最少需要指定两个参数(年和月),其他参数都是可选的,默认等于0。如果只使用年一个参数,Date对象会将其解释为毫秒数。
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)
上面代码(除了第一行)返回的是2013年1月1日零点的时间,可以看到月份从0开始计算,因此1月是0,12月是11。但是,月份里面的天数从1开始计算。
静态方法
Date.now()
now方法返回当前距离1970年1月1日00:00:00
的毫秒数
Date.now(); // 1427974222853
Date.parse()
parse方法用来解析日期字符串,返回距离1970年1月1日 00:00:00
的毫秒数
日期字符串的格式应该完全或者部分符合YYYY-MM-DDTHH:mm:ss.sssZ
格式,Z表示时区,是可选的
如果解析失败,返回NaN
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-10 20:00:00") Date.parse("2011-10-10T14:48:00")
注意事项
在新建日期对象时,如果不设置时间,则认为创建的是 utc 的0点,也就是北京时间8点。 如果设置时间,则是北京时间当前时间。
new Date('2018-01-01') // Mon Jan 01 2018 08:00:00 GMT+0800 (CST) new Date('2018-01-01 00:00:00') //Mon Jan 01 2018 00:00:00 GMT+0800 (CST)
关于Date的应用函数
参数为时间对象毫秒数的字符串格式,返回值为字符串。假设参数为时间对象毫秒数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 interval = Date.now() - time; switch(true){ case interval<0: console.log('在未来'); break; case interval>=0&&interval<(60*1000): // 距当前时间不到1分钟时间间隔 console.log('刚刚'); break; case interval>=(60*1000)&&interval<(60*60*1000): // 距当前时间大于等于1分钟,小于1小时 console.log('3分钟前'); break; case interval>=(60*60*1000)&&interval<(24*60*60*1000): // 距离当前时间大于等于1小时,小于24小时 console.log('8小时前'); break; case interval>=(24*60*60*1000)&&interval<(30*24*60*60*1000): // 距离当前时间大于等于24小时,小于30天 console.log('3天前'); break; case interval>=(30*24*60*60*1000)&&interval<(12*30*24*60*60*1000): // 距离当前时间大于等于30天小于12个月 console.log('2个月前'); break; case interval>=(12*30*24*60*60*1000): // 距离当前时间大于等于12个月 console.log('8年前'); break; } } friendlyDate('1504513587883'); //输出:"刚刚" console.log(Date.now()) //输出:1504513614540
上一篇: 印度承认比特币合法地位 比特币重回2700美元关口
下一篇: ES6学习笔记(8)----对象的扩展
推荐阅读
-
JavaScript正则表达式替换字符串中图片地址(img src)的方法
-
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
-
JavaScript—字符串(String)用法
-
javascript如何把一个字符串转换为char?
-
JavaScript字符串转数字的5种方法及遇到的坑
-
JavaScript基于replace+正则实现ES6的字符串模版功能
-
javascript基础练习之翻转字符串与回文
-
javascript json字符串到json对象转义问题
-
JavaScript使用Math.random()生成简单的验证码
-
Java中Date()类 日期转字符串、字符串转日期的问题