本章节介绍如何掌握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的方法。

Methods of 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 对象的方法。

Methods of Math
Method Description
abs() 绝对值
sin()cos()tan() 标准三角函数;参数为弧度
asin()acos()atan()atan2() 反三角函数; 返回值为弧度
sinh()cosh()tanh() 双曲三角函数; 返回值为弧度.
asinh()acosh()atanh() 反双曲三角函数;返回值为弧度.

pow()exp()expm1()log10(),log1p()log2()

指数与对数函数
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代表了当前日期和时间。然后调用了getHoursgetMinutes以及getSeconds方法把当前的时分秒分别赋值给了hourminute,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 中的数字和日期类型的更多相关文章

  1. DB2中字符、数字和日期类型之间的转换

    DB2中字符.数字和日期类型之间的转换 一般我们在使用DB2或Oracle的过程中,经常会在数字<->字符<->日期三种类 型之间做转换,那么在DB2和Oracle中,他们分别 ...

  2. javaScript中Number数字类型方法入门

    前言 Number和Math都属于JavaScript中的内置对象,Number数字类型作为基础数据类型,我们在开发过程中会经常用到,包括数字精度的格式化,还有字符串转换成数字等操作. Number数 ...

  3. javascript中的数字玩法,颠覆你的眼睛

    1.JavaScript中的数字中有一些很奇葩的现象. 在Chrome控制台中可以自己做一下实验: 1 === 1.0 ; //true 习惯了强类型语言,如java,c,OC看到这个结论还是有点小迷 ...

  4. poi操作officePOI操作excel中的数据格式(日期类型)

    7.3.3 POI中Excel文件Cell的类型 在读取每一个Cell的值的时候,通过getCellType方法获得当前Cell的类型,在Excel中Cell有6种类型,如表7-3所示. 表7-3 C ...

  5. JavaScript中常用的几种类型检测方法

    javascript中类型检测方法有很多: typeof instanceof Object.prototype.toString constructor duck type 1.typeof 最常见 ...

  6. JavaScript 把字符串类型转换成日期类型

    今天在写习题时,遇到些小问题,在这里把答案分享给大家,希望能帮助到大家! 一.把字符串转换成日期类型 var str = "1997-3-12"; var d = new Date ...

  7. javascript中检测一个变量的类型

    /** * 怎么检测一个变量的类型? * 在js中检测对象类型主要有三种:typeof, instanceof, constructor, 这几种都可以检测对象的类型. * 另外还可以适应jQuery ...

  8. 关于MySQL中的三种日期类型

    Mysql中我们经常用来存储日期的数据类型有三种:Date.Datetime.Timestamp. Date数据类型用来存储没有时间的日期.Mysql获取和显示这个类型的格式为"YYYY-M ...

  9. JavaScript中有关数字的精确计算

    问题这样的: 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) ,我先怀疑是四舍五入的问题,就直接用JS算了一个结果为:206.08499999999998 怎么会 ...

随机推荐

  1. Python自动化之Django的CSRF

    什么CSRF? CSRF, Cross Site Request Forgery, 跨站点伪造请求.举例来讲,某个恶意的网站上有一个指向你的网站的链接,如果 某个用户已经登录到你的网站上了,那么当这个 ...

  2. 利用MyEclipse的ant插件生成Hibernate的映射文件

    先下载:xdoclet-plugins-dist-1.0.4-bin build.xml文件 <?xml version="1.0" encoding="UTF-8 ...

  3. [RxJS] Creation operators: interval and timer

    It is quite common to need an Observable that ticks periodically, for instance every second or every ...

  4. 让jquery easyui datagrid列支持绑定嵌套对象

    嵌套对象是指返回的json数据,是对象的某个属性自带有属性.而我们恰恰又需要这个属性,默认情况下easyui的datagrid是不支持绑定嵌套对象的.比如:datagrid的field属性只能为fie ...

  5. [转] linux下的僵尸进程处理SIGCHLD信号

    什么是僵尸进程? 首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区,关闭所有打开的文件等,但内核为每一个终止子进程保存了一定量的信息.这些 信息至少包括进程ID,进程的终止状态,以及 ...

  6. Java基础知识强化70:正则表达式之引入案例(QQ号码校验)

    1. 校验QQ号码的案例,如下: package cn.itcast_01; import java.util.Scanner; /* * 校验qq号码. * 1:要求必须是5-15位数字 * 2:0 ...

  7. sql 删除多项

    delete from 表名 where 字段 in(值,值,值.......)

  8. java JNI 的实现(1)-又进一步加深对JVM实现的理解

    目录 概述 主要优点 主要缺点 JNI实现的简单例子 开发工具 简略步骤 1,在eclipse的 'java类' 中声明一个 'native方法'; 2,使用 'javah' 命令生成包含'nativ ...

  9. Java语言实现简单FTP软件------>FTP软件远程窗口的实现(六)

    1.首先看一下远程窗口的布局效果 2.看一下本地窗口实现的代码框架 3.远程窗口主要实现代码FtpPanel.java package com.oyp.ftp.panel.ftp; import ja ...

  10. telnet简单操作 模拟请求

    telnet简单操作   模拟请求 一: 二: 三: 按照以上操作即可!