数据类型
确认一个数值是否超出范围,可以使用isFinite()函数,如果没超过返回true,超过了返回false
var box=100e1000;//
alert(isFinite(box));
NaN即非数值 (Not a Number)是一个特殊的值,这个数值用于表示一个本来要返回数值的操作数
未返回数值的情况(这样就不会抛出错误),比如在其他语言中,任何数值除以0都会导致错误而终止
程序执行,但在ECMA中会返回特殊的值,因此不会影响程序的执行
var box=0/0;//数字中第一个可以是0,第二个不可以是0。 返回NaN
alert(box)
var box=12/0;//超过范围 infinity
alert(box);
var box=12/0*0 返回NaN
alert(box)
可以通过Number.NaN的值得到NaN的值,任何与NaN进行运算的结果均为NaN,NaN与自身不相等(NaN不与任何值相等)
alert(Number.NaN) 得到NaN
var box=NaN+1;// NaN
alert(box);
alert(NaN==NaN)// false,不相等,因为他可能是处以0造成的,也有可能是正无穷造成的所以不相等
isNaN()函数判断是不是NaN 数据类型
var box=0/0;
alert(isNaN(box)); 返回 true ,
var box =0/12;
alert(isNaN(box)); 返回flase;
alert(isNaN("12")); 返回flase //字符串数值自动转换成数值
alert(isNaN("dasdas")) 返回true,dasdas不能转换为数值。
alert(isNaN(true)); 返回false,因为true是1 false是0,
/Number()函数,把非数值转换为数值
alert(Number(true)) Boolean类型的true和false分别转换成1和0
alert(Number(null)) 空对象返回0
alert(Number(undefined)) 返回NaN
alert(Number("070")) // 返回70, 十进制会把0自动去掉
alert(Number("09.90")) // 返回9.9, 浮点型数值会把前的0和后面的0自动去掉
alert(Number(""))返回0 如果字符串为空返回0
alert(Number("123w123"))//返回NaN,因为包含字母
//parseint()函数只能转换字符串至数值,
alert(parseInt("qq456qq"));返回NaN因为第一个不是数值
alert(parseInt("456qq")); 返回整数部分
alert(parseInt("456qq456qq")); 返回 456,从第一数值开始取,然后有字母不返回了,
alert(parseInt("56.12")); 返回56,遇到点.不返回
alert(parseInt("")); 返回NaN
//parseIn()函数只能转换字符串至数值,除了能识别十进制数值,也能识别八进制和十六进制
alert(parseInt("0xA"));返回10,16进制
alert(parseInt("0xALEE")); 返回10,后面的字母LEE省略了
alert(parseInt("70",8)); //返回70, 8进制
alert(parseInt("0xAF")); 175,16进制
alert(parseInt("AF",16))第二个参数指定十六进制,可以去掉0x前导
alert(parseInt("AF")); 返回NaN 理所当然
alert(parseInt("1010101010101101010",2)) 2进制转换
alert(parseInt("70",8)) ,返回56, 八进制转换,前面不用0
parseFloat()用于浮点数值转换的,和parseInt一样,从第一位解析到非浮点数值位置
alert(parseFloat("123Lee")); 123
alert(parseFloat("0xA")); 0,浮点数不认十六进制
alert(parseFloat("123.4.5")); 123.4 只认第一个小数点
alert(parseFloat("0123.4.50")); 123.4,去掉前导和后导
alert(parseFloat("1.234e7"));12700000//把科学技术法转成普通数值
Number类型包含两种数值:整型和浮点型,ECMA定义了不同的数值字面量格式。有十进制 ,八进制
十六进制。
var box=100;//十进制整型
alert(box)
var box=070;//八进制数值字面量,前导必须是0,八进制序列0-7
alert(box)
var box=079;//有个9,无效8进制,自动解析为79
alert(box)
var box=08;//8为基数不能超过8,无效8进制,自动解析为8
alert(box)
十六进制字面量前面两位必须是0x,后面是(0-9及A-F)
var box=0xA;//十六进制,输出10
alert(box)
var box=0x1f;//十六进制,输出31
alert(box)
浮点类型,就是该数值中必须包含一个小数点,并且小数点后面必须至少有一位数字,浮点型就没有进制
var box=03.8; 错误,前面不能有0
alert(box);
var box=00.8; 错误
alert(box);
var box=0.80; //0.8,把后导去掉
alert(box);
var box=.8; //0.8,对的,但不推荐此写法
alert(box);
由于保存浮点数值需要的内存空间比整型数值大两倍,因此EMCA会自动将可以转换为整型的浮点数值
转成为整型
var box=8.0; //8,
alert(box);
//对于过大或者过小的数值,可以使用科学计数法来表示(e表示法),用e来表示数值的前面10的指数次幂
var box=4.12e9; 41200000
alert(box)
var box=0.000000412; 4.12e-7
alert(box)
虽然浮点数值的最高精度是17位,但是算术运算符可能会不准确,判断的时候一定要考虑到这个问题
alert(0.1+0.2)
浮点数值范围在Number.MIN_VALUE~Number.MAX_VALUE之间
//如果超过浮点数值的最大值和最小值,那么就先出现Infinity(正无穷)或者-infinity(负无穷)
var box=100e1000;
alert(box);
var box=-100e1000;
alert(box);
//如果超过浮点数值的最大值和最小值,那么就先出现Infinity(正无穷)或者-infinity(负无穷)
//也可以通过Number.POSITIVE_INFINITY,和Number.NEGATIVE_INFINITY得到正无穷Infinity和负无穷-Infinity的值
alert(Number.POSITIVE_INFINITY); //正无穷
alert(Number.NEGATIVE_INFINITY) //负无穷