《JavaScript高级程序设计》学习总结三
Posted wxhhts
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《JavaScript高级程序设计》学习总结三相关的知识,希望对你有一定的参考价值。
引言:新的一天,坚持学习,总结。昨天的文章今天再看一次,发现更新的知识点着实有些少了,今天要多写一才行。那么这一篇博文继续对数据概念、基础等知识点进行总结。
Number类型:
Number 类型应该是javascript中最受关注的类型了。这种类型采用 IEEE754 格式来表示整数和浮点数值(双精浮点数值),为支持各种数值类型,ECMA-262定义了不同的数值字面量格式。比如:
十进制: var intNum=65;(整型)
var octalNum=070 (八进制的56),八进制的第一位数值必须是0 ,然后八进制数字序列(0~7),八进制字面量在严格模式下是无效的,会导致支持的JavaScript引擎抛出错误。
var hexNum=0xA (十六进制的10),十六进制字面值前两位必须是0x ,后跟任何十六进制数字,(0~9 及A~F),其中A~F 可以大写也可以小写。
在计算时,所有八进制与十六进制表示的数值最终都被转换成十进制。
浮点数值:
所谓浮点数,就是指数值中必须包含一个小数点,并且小数点后面必须至少有一个数字。
由于保存浮点数值需要的内存空间是保存整数值 的两倍,因此ECMAScript 会不失时机的将浮点数转换成整数,那么很显然,如果小数点后面没有任何数字,那么这个数就可以作为整型来保存。
例如:var floatNum=1.0; 这个就会被解析成1 。
对于那些极大或者极小的数值,可以采用e 表示法(科学计数法),用e 表示法表示数值 等于e 前面的数值乘以10 的指数次幂,比如:var floatNum=3.14e2 那么这个数就是314 。
浮点数的最高精度为17位小数,但是进行算数计算时其精度远远不如整数,例如 ,0.1+0.2的结果不是0.3 而是0.30000000000000004 (别数了一共15个0)。这个小小的舍入误差会导致无法测试特定的浮点数值。当然如果是0.15+0.15 或者0.05+0.25那么都没问题。因此都不要测试特定的浮点数值。
数值范围:
由于内存限制,ECMAScript 并不能保存世界上的所有值,最小值一般保存在:Number.MIN_VALUE 中,最大值保存在Number.MAX_VALUE 中。而超出的范围则转化成特殊的 Infinity 值,如果是负值那么就是 -infinity (负无穷),正值则是 Infinity(正无穷)。如果某次计算返回 Infinity的话(无论正负),那么这个数值是不能进行下次计算的。所以为了避免这种情况,我们可以用 isFinite()函数来判断这个函数是否在最大与最小值期间。如果是,那么返回true 。关于最大与最小值的具体值,大多数浏览器中最小值可以到:5e-324 而最大可以是:1.7976931348623157e+308。
NaN (not a number):
这个数值作用是:表示一个本来要返回数值的操作数未返回数值的情况。(通俗点就是这个返回这个数不是数字)。在其他的编程语言中任何数除以0 可能会导致报错,但是JavaScript不会,它会返回一个NaN 。
NaN有两个特点:1、任何涉及NaN的操作(例如:NaN/5)都会返回NaN。2、NaN不与任何数相等,即使这个数是NaN也一样(NaN==NaN 会报错)。
针对NaN的这两个特点,ECMAScript 定义了isNaN()函数,这个函数接收一个参数,其参数可以是任何类型,而这个函数可以帮我们判断这个数值“不是数值”,isNaN()接收到参数后会帮我们将其转化成数值,不能转化成数值的数则返回 true。比如:
alert( isNaN(NaN )) //true
alert( isNaN(10)) //false 10是一个数值
alert( isNaN("10" )) //false 可以被转换成数值
alert( isNaN("blue")) //true 不能转化成数值
alert( isNaN("true" )) //false 可以被转换成数值 1
这个函数比较不可思议的是可以适用于对象,当参数是一个对象时,会首先调用 valueOf ()方法,然后确定该返回值是否能转化成数值,如果不能则调用 toString()方法进行测试。(具体详情接下来会解答,请耐心往下看)。
数值转换:
有三个函数可以把进行数值转换:Number(),parseInt(),parseFloat()。第一个函数适用于任何类型,另外两个函数则专门用于把字符串换成数值。这三个函数对相同的参数有不同的输出,那么接下来让我们分别对其进行详细的了解:
Number()转换规则:
1、如果是boolean。true 和false 会被转换成 1 和0 。
2、如果是数字(废话,如果是数字那当然没变啦)。
3、如果是NULL ,返回 0.
4、如果是undefined 则返回NaN .
5、如果是字符串,那么遵循下列规则:(1)字符串只包含数字,那么久转换成对应的数字。比如“111” 转成111,“012”转成12(前面的0会被忽略)。
(2)如果字符串包含有效的浮点,则转成对应的浮点 比如 “1.1” 转成1.1 。
(3)如果字符串包含有效的十六进制,例如“0xf” 那么会转成对应的十进制数。
(4)如果字符串为“ ”空,那么转换为0.
(5)如果字符串包含上述所说的格式之外的字符,则转换为NaN,如果是对象,则调用对象的valueOf()方法,然后依照上面的规则进行再次的检测判断,如果转换的结果是NaN,那么调用 toString()方法进行再次的检测。(不得不说“对象”的待遇就是不一般)。
实例:Number("hello")// NaN
Number(" ")// 0
Number(" 00064")// 64
Number(true)// 1
parseInt():
这个方法的特点:1、会忽略字符串前面的空格,直到找到第一个字符。
2、如果第一个字符不是数字字符或者负号,则返回NaN.
3、这个方法碰到数字字符串后会一直解析下去,直到碰到非数字字符。
4、该方法能识别进制,如以0x 开头则会当做十六进制。0开头则是八进制(但是这里存在分歧,ECMAScript 3认为是八进制,而ECMAScript 认为是十进制0 )。
实例:
paeseInt(“123abc”)// 123
paeseInt(“ ”)// NaN
paeseInt(“0xA”)// 10
paeseInt(22.5)/ /22
paeseInt(“070”)// 56
paeseInt(“70”)// 70
paeseInt(“0xf”)// 15
正如上面所说。因为 070在不同版本中解析死不一样的,这样的话会造成不好的效果。于是,平时我们在使用这个方法时可以用两个参数。第二个参数指定进制。例如 parseInt( "070", 8 )。这样就能更精准的获取到想要的效果。(十进制可忽略第二个参数)。
parseFloat():
这个方法就不做赘述,因为和parseInt 差不多但是还是有情况不同,比如:parseFloat 会始终忽略前导的零,十六进制格式的字符会被转化成0,此方法只解析十进制,所以不提供第二个参数,直接上实例:
parseFloat("1234blue")//1234
parseFloat("0xA")//0 十六进制被解析成0
parseFloat("22.5")//22.5
parseFloat("22.34.5")//22.34
parseFloat("0908.5")//908.5
parseFloat("3.125e7")//31250000.。
以上是关于《JavaScript高级程序设计》学习总结三的主要内容,如果未能解决你的问题,请参考以下文章