说明
前一篇博客介绍了js以及一些关于js基本类型的简单知识,本篇博客将详细介绍js的基础类型,捎带介绍对象类型,更详细的对象类型的说明将后续再讲。
js中类型的说明
js中的类型分为基本类型和对象类型,其中基本类型包括:①数字、②字符串、③布尔值。此外还有两个原始值null和undefined。其中对象包括数组对象、函数对象和普通对象,普通对象是“命名值”的无序集合,而数组对象是带编号的值的有序集合。JavaScript核心还定义了三种有用的类:日期(Data)类、正则(RegExp)类、错误(Error)类。
数字
和常见的其它编程语言不同,js不区分整数和浮点数,js中所有的数值均用浮点数值表示。
整型直接量
在js中一个数字序列默认是十进制的整数,同时支持使用"0x"或"0X"开头的十六进制,值得注意的是虽然有些JavaScript解释器支持0开头的八进制表示形式,但是ECMAScript标准并不支持,所以尽量不要使用八进制表示形式,以免出现移植上的问题。
浮点型直接量
浮点型直接量的表示形式为:[digits][.digits][(E|e)[(+|-)]digits],例如①3.14、②6.02e23、③.22e-23 //0.22x10-23
js中的算术运算
js不仅支持常见的加(+)减(-)乘(*)除(/)和求余(%),还支持更复杂的运算,不过需要Math对象的支持:
js语句 | 作用 |
Math.pow(2,53) | 求2的53次幂 |
Math.round(0.6) | 四舍五入,结果为1.0 |
Math.max(x,y,z) | 求最大值 |
Math.PI | 返回圆周率π的值 |
js的算术运算会出现上溢和下溢,这与其它语言稍有区别,上溢的结果为Infinity或-Infinity,下溢的结果为0或-0,一般0和-0没什么区别(0===-0结果为true),但有时候还是会有不同,比如1/0结果为Infinity,而1/-0结果为-Infinity。此外还有一个结果就是NaN(Not a Number),当出现结果不是数字或者无法将其转化为数字时用NaN表示,比如负数开方、零除以零、无穷大除以无穷大等操作。
全局函数isNaN()和全局函数isFinity()可以用于判断数值的类型,当一个数是NaN时isNaN()函数返回true,当一个数不是NaN、Infinity或-Infinity时isFinity()返回true。
二进制浮点数的四舍五入错误
看下面的代码:
var x = .3 - .2;
var y = .2 - .1;
x == y //false
x == .1 //false
y == .1 //true
造成这种结果的原因是因为二进制浮点数的表示是近似表示,值得注意的是这种问题不仅在js中会出现,在其它所有利用浮点数计算的语言中都会存在。为了更好的解决这种问题可以将自己要算的数同时扩大一个倍数,看下面的代码:
var x = 3 - 2;
var y = 2 - 1;
x == y; //true
日期和时间
Date是js的语言核心的一部分,这里简单介绍Date的一些简单用法,更详细的介绍将在后续的博客中介绍。
var now = new Date(); //获取当前时间
var then = new Date(2011,0,1); //2011年1月1号
var later = new Date(2011,0,1,17,10,30) //2011年1月1号17时10分30秒
var elapsed = now - then; //结果为时间间隔的毫秒数
later.getFullYear(); //
later.getMonth(); //0:月份计数从0开始
later.getDate(); //1:每月的日期计数从1开始
later.getDay(); //6:0代表星期日,6代表星期六
文本
说起字符串,就需要谈到编码方式了,js采用UTF-16的Unicode编码,这样以来处于“基本多语种平面”的字符都是两个字节,而处于“辅助多语种平面”的字符是四个字节。这意味在js中长度为2的字符串可能有两个字符,也可能只有一个字符。
var p = "π";
var e = "