本章节介绍如何掌握Javascript里的数字和日期类型
数字EDIT
在 JavaScript 里面,数字都是双精度浮点类型的 double-precision 64-bit binary format IEEE 754 (也就是说一个数字只能在 -(253 -1) 和 253 -1之间)。没有特定的数据类型为整型。除了能够表示浮点数,号码类型有三个符号值: +
Infinity
、-
Infinity
和 NaN
(not-a-number)。参见Javascript指南中的 JavaScript data types and structures ,了解其他更多的基本类型。
您可以使用四种类型的数字进制:十进制,二进制,八进制和十六进制。
十进制数字(Decimal numbers)
1234567890
42
// 数字第一个为零的注意事项:
0888 // 888 将被当做十进制处理
0777 // 在非严格格式下会被当做八进制处理 (用十进制表示就是511)
请注意,十进制可以以0开头,后面接其他十进制数字,但是假如后面接的十进制数字小于8,那么该数字将会被当做八进制处理。
二进制数字(Binary numbers)
二进制数字语法是以零为开头,后面接一个小写或大写的拉丁文字母B(0b或者是0B
)。 假如0b后面的数字不是0或者1,那么就会提示这样的语法错误( SyntaxError):
"Missing binary digits after 0b"。
var FLT_SIGNBIT = 0b10000000000000000000000000000000; // 2147483648
var FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
var FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607
八进制数字(Octal numbers)
八进制数字语法是以0为开头的。假如0后面的数字不在0到7的范围内,该数字将会被转换成十进制数字。
var n = 0755; // 493
var m = 0644; // 420
十六进制(Hexadecimal numbers)
十六进制数字语法是以零为开头,后面接一个小写或大写的拉丁文字母X(0x或者是0X
)。假如0x
后面的数字超出规定范围(0123456789ABCDEF),那么就会提示这样的语法错误(SyntaxError):
"Identifier starts immediately after numeric literal".
0xFFFFFFFFFFFFFFFFF // 295147905179352830000
0x123456789ABCDEF // 81985529216486900
0XA // 10
指数形式(Exponentiation)
1E3 // 1000
2e6 // 2000000
0.1e2 // 10
数字对象EDIT
内置的Number
对象有一些数字化常量属性,如最大值、不是一个数字和无穷大的。你不能改变这些属性的值,但可以按下边的方式使用它们:
var biggestNum = Number.MAX_VALUE;
var smallestNum = Number.MIN_VALUE;
var infiniteNum = Number.POSITIVE_INFINITY;
var negInfiniteNum = Number.NEGATIVE_INFINITY;
var notANum = Number.NaN;
你永远只用从Number对象引用上边显示的属性,而不是你自己创建的Number对象的属性。
下面的表格汇总了数字对象的属性:
数字的属性
属性 | 描述 |
---|---|
Number.MAX_VALUE |
可表示的最大值 |
Number.MIN_VALUE |
可表示的最小值 |
Number.NaN |
特指”非数字“ |
Number.NEGATIVE_INFINITY |
特指“负无穷”;在溢出时返回 |
Number.POSITIVE_INFINITY |
特指“正无穷”;在溢出时返回 |
Number.EPSILON |
Difference between one and the smallest value greater than one that can be represented as a Number . |
Number.MIN_SAFE_INTEGER |
JavaScript最小安全整数. |
Number.MAX_SAFE_INTEGER |
JavaScript最大安全整数. |
Method | Description |
---|---|
Number.parseFloat() |
把字符串参数解析成浮点数, Same as the global parseFloat() function. |
Number.parseInt() |
Parses a string argument and returns an integer of the specified radix or base. Same as the global parseInt() function. |
Number.isFinite() |
判断传递的值是否为有限数字。 |
Number.isInteger() |
判断传递的值是否为整数。 |
Number.isNaN() |
判断传递的值是否为 NaN . More robust version of the original globalisNaN() . |
Number.isSafeInteger() |
判断传递的值是否为安全整数。 |
数字的类型提供了不同格式的方法以从数字对象中检索信息。以下表格总结了 Number.prototype的方法。
Method | Description |
---|---|
toExponential() |
返回一个数字的指数形式的字符串,形如:1.23e+2 |
toFixed() |
返回指定小数位数的表示形式, var a=123,b=a.toFixed(2)//b="123.00" |
toPrecision() |
返回一个指定精度的数字。如下例子中,a=123中,3会由于精度限制*消失 var a=123,b=a.toPrecision(2)//b="1.2e+2" |
Math
objectEDIT
对于内置的Math
数学常项和函数也有一些属性和方法。 比方说, Math对象的
PI
属性会有属性值 pi (3.141...),你可以像这样调用它:
Math.PI
同理,标准数学函数也是Math的方法。 这些包括三角函数,对数,指数,和其他函数。比方说你想使用三角函数 sin
, 你可以这么写:
Math.sin(1.56)
需要注意的是Math的所有三角函数参数都是弧度制。
下面的表格总结了 Math
对象的方法。
Method | Description |
---|---|
abs() |
绝对值 |
sin() , cos() , tan()
|
标准三角函数;参数为弧度 |
asin() , acos() , atan() , atan2()
|
反三角函数; 返回值为弧度 |
sinh() , cosh() , tanh()
|
双曲三角函数; 返回值为弧度. |
asinh() , acosh() , atanh()
|
反双曲三角函数;返回值为弧度. |
指数与对数函数 | |
floor() , ceil()
|
返回最大/最小整数小于/大于或等于参数 |
min() , max()
|
Returns lesser or greater (respectively) of comma separated list of numbers arguments |
random() |
返回0和1之间的随机数。 |
round() , fround() , trunc() , |
四舍五入和截断函数 |
sqrt() , cbrt() , hypot()
|
平方根,立方根,平方参数的和的平方根 Square root of the sum of square arguments. |
sign() |
数字的符号, 说明数字是否为正、负、零。 |
clz32() ,imul()
|
在32位2进制表示中,开头的0的数量. The result of the C-like 32-bit multiplication of the two arguments. |
和其他对象不同,你不能够创建一个自己的Math对象。你只能使用内置的Math对象。
日期对象EDIT
JavaScript没有日期数据类型。但是你可以在你的程序里使用 Date
对象和其方法来处理日期和时间。Date对象有大量的设置、获取和操作日期的方法。 它并不含有任何属性。
JavaScript 处理日期数据类似于Java。这两种语言有许多一样的处理日期的方法,也都是以1970年1月1日00:00:00以来的毫秒数来储存数据类型的。
Date
对象的范围是相对距离 UTC 1970年1月1日 的前后 100,000,000 天。
创建一个日期对象:
var dateObjectName = new Date([parameters]);
这里的 dateObjectName 对象是所创建的Date对象的一个名字,它可以成为一个新的对象或者已存在的其他对象的一个属性。
不使用 new 关键字来调用Date对象将会简单地将所提供的date对象转换为字符串表示形式。
前边的语法中的参数可以是一下任何一种:
- 无参数 : 创建今天的日期和时间,例如:
today = new Date();
. - 一个符合以下格式的表示日期的字符串: "月 日, 年 时:分:秒." 例如:
var Xmas95 = new Date("December 25, 1995 13:30:00")。
如果你省略时、分、秒,那么他们的值将被设置为0。 - 一个年,月,日的整型值的集合,例如:
var Xmas95 = new Date(1995, 11, 25)。
- 一个年,月,日,时,分,秒的集合,例如:
var Xmas95 = new Date(1995, 11, 25, 9, 30, 0);
.
Date对象的方法
处理日期时间的Date对象方法可分为以下几类:
- "set" 方法, 用于设置Date对象的日期和时间的值。
- "get" 方法,用于获取Date对象的日期和时间的值。
- "to" 方法,用于返回Date对象的字符串格式的值。
- parse 和UTC 方法, 用于解析Date字符串。
通过“get”和“set”方法,你可以分别设置和获取秒,分,时,日,星期,月份,年。这里有个getDay方法可以放回星期,但是没有相应的setDay方法用了设置星期,因为星期事自动设置的。这些方法用整数来代表以下这些值:
- 秒,分: 0 至 59
- 时: 0 至 23
- 星期: 0 (周日) 至 6 (周六)
- 日期:1 至 31
- 月份: 0 (一月) to 11 (十二月)
- 年份: 从1900开始的年数
例如, 假设你定义了如下日期:
var Xmas95 = new Date("December 25, 1995");
Then Xmas95.getMonth()
返回 11, and Xmas95.getFullYear()
返回 1995.
getTime
和 setTime
方法对于比较日期是非常有用的。getTime
方法返回从1970年1月1日00:00:00的毫秒数。
例如,以下代码展示了今年剩下的天数:
var today = new Date();
var endYear = new Date(1995, 11, 31, 23, 59, 59, 999); // 设置日和月,注意,月份是0-11
endYear.setFullYear(today.getFullYear()); // 把年设置为今年
var msPerDay = 24 * 60 * 60 * 1000; // 每天的毫秒数
var daysLeft = (endYear.getTime() - today.getTime()) / msPerDay;
var daysLeft = Math.round(daysLeft); //返回这一年剩下的天数
这个例子中,创建了一个包含今天的日期的Date对象,并命名为today,然后创建了一个名为endYear的Date对象,并把年份设置为当前年份,接着使用每天的毫秒数和getTime分别获取今天和年底的毫秒数,计算出了今天到年底的天数,最后四舍五入得到今年剩下的天数。
parse方法对于从日期字符串赋值给现有的Date对象很有用,例如:以下代码使用parse和setTime分配了一个日期值给IPOdate对象:
var IPOdate = new Date();
IPOdate.setTime(Date.parse("Aug 9, 1995"));
例子:
在下边的例子中,JSClock()函数返回了用数字时钟格式的时间:
function JSClock() {
var time = new Date();
var hour = time.getHours();
var minute = time.getMinutes();
var second = time.getSeconds();
var temp = "" + ((hour > 12) ? hour - 12 : hour);
if (hour == 0)
temp = "12";
temp += ((minute < 10) ? ":0" : ":") + minute;
temp += ((second < 10) ? ":0" : ":") + second;
temp += (hour >= 12) ? " P.M." : " A.M.";
return temp;
}
JSClock函数首先创建了一个叫做time的新的Date对象,因为没有参数,所以time代表了当前日期和时间。然后调用了
getHours
, getMinutes以及getSeconds方法把当前的时分秒分别赋值给了hour
, minute
,second。
接下来的4句在time的基础上创建了一个字符串,第一句创建了一个变量temp,并通过一个条件表达式进行了赋值,如果小时大于12,就为 (hour - 12
), 其他情况就为 hour, 除非 hour 为 0, 这种情况下,它会变成 12.
接下来的语句拼接了minute
的值到temp后。如果minute小于10,条件表达式就会在minute前边加个0,其他情况下加一个分号。然后按同样的方式在temp后拼接上了秒。
最后,如果hour是12或者更大,条件表达式会在temp后拼接"P.M.",否则拼接"A.M." 。
JavaScript 中的数字和日期类型的更多相关文章
-
DB2中字符、数字和日期类型之间的转换
DB2中字符.数字和日期类型之间的转换 一般我们在使用DB2或Oracle的过程中,经常会在数字<->字符<->日期三种类 型之间做转换,那么在DB2和Oracle中,他们分别 ...
-
javascript中的数字玩法,颠覆你的眼睛
1.JavaScript中的数字中有一些很奇葩的现象. 在Chrome控制台中可以自己做一下实验: 1 === 1.0 ; //true 习惯了强类型语言,如java,c,OC看到这个结论还是有点小迷 ...
-
poi操作officePOI操作excel中的数据格式(日期类型)
7.3.3 POI中Excel文件Cell的类型 在读取每一个Cell的值的时候,通过getCellType方法获得当前Cell的类型,在Excel中Cell有6种类型,如表7-3所示. 表7-3 C ...
-
JavaScript中常用的几种类型检测方法
javascript中类型检测方法有很多: typeof instanceof Object.prototype.toString constructor duck type 1.typeof 最常见 ...
-
JavaScript 把字符串类型转换成日期类型
今天在写习题时,遇到些小问题,在这里把答案分享给大家,希望能帮助到大家! 一.把字符串转换成日期类型 var str = "1997-3-12"; var d = new Date ...
-
javascript中检测一个变量的类型
/** * 怎么检测一个变量的类型? * 在js中检测对象类型主要有三种:typeof, instanceof, constructor, 这几种都可以检测对象的类型. * 另外还可以适应jQuery ...
-
关于MySQL中的三种日期类型
Mysql中我们经常用来存储日期的数据类型有三种:Date.Datetime.Timestamp. Date数据类型用来存储没有时间的日期.Mysql获取和显示这个类型的格式为"YYYY-M ...
-
JavaScript中有关数字的精确计算
问题这样的: 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) ,我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会 ...
-
javascript中比较数字大小
做项目,遇到一个让人非常纠结的问题,就是获取的两个值比较,却出现了一位数比二位数大的情况.刚开始还以为哪里写错了,检查了几遍,用ie调了下,意识到是应该是用错了比较方法了.才想起以前也碰到过这种情况的 ...
随机推荐
-
2.C#自定义Attribute
阅读目录 一:C#自定义Attribute 二:AttributeUsageAttribute中的3个属性(Property)中的AttributeTargets 三:Attribut ...
-
How can I create an executable JAR with dependencies using Maven?
http://*.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencies-using ...
-
Postman(API &; HTTP请求调试插件)和Apizza fiddler
http://blog.csdn.net/u011012932/article/details/51456263#comments
-
C++中(int&;)和(int)的区别
在说这个问题之前,先说两个需要知道的背景知识: (1)语言的类型的强制转换不会修改原来的数据,会另外的开辟一个临时的或者程序中指定的空间来存储强制转换后的值. (2)C++引用的实现是在符号表中动了手 ...
-
ELK logstash geoip值为空故障排查
首先我们用的是elasticsearch+kibana+logstash+filebeat 客户端filebeat收集日志后经过服务端logstash规则处理后储存到elasticsearch中,在k ...
-
VSTO:使用C#开发Excel、Word【12】
Excel对象模型中的事件了解excel对象模型中的事件至关重要,因为这通常是代码运行的主要方式.本章将检查Excel对象模型中的所有事件,引发事件以及可能与这些事件关联的代码类型. Excel对象模 ...
-
公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取
公众号第三方平台开发 教程一 创建公众号第三方平台 公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取 公众号第三方平台开发 教程三 微信公众号 ...
-
MySQL存储过程-->;通过游标遍历和异常处理迁移数据到历史表
-- 大表数据迁移,每天凌晨1点到5点执行,执行间隔时间10分钟,迁移旧数据到历史表. DELIMITER $$ USE `dbx`$$ DROP PROCEDURE IF EXISTS `pro_x ...
-
go语言之进阶篇 select实现的超时机制
1.select实现的超时机制 示例: package main import ( "fmt" "time" ) func main() { ch := mak ...
-
解决数据库自增ID的问题
(1)设置主键自增为何不可取这样的话,数据库本身是单点,不可拆库,因为id会重复. (2)依赖数据库自增机制达到全局ID唯一使用如下语句:REPLACE INTO Tickets64 (stub) V ...