ECMAScript数据类型之Number类型实例分析


这篇文章主要介绍“ECMAScript数据类型之Number类型实例分析”,在日常操作中,相信很多人在ECMAScript数据类型之Number类型实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ECMAScript数据类型之Number类型实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!Number 类型:Number类型使用IEEE 754格式表示整数和浮点值(在某些语言中也叫双精度值),不同的数值类型相应地也有不同的数值字面量格式。最基本的数值字面量格式是十进制整数,如下:整数也可以用八进制(以 8 为基数)或十六进制(以 16 为基数)字面量表示对于八进制字面量,第一个数字必须是零(0),然后是相应的八进制数字(数值 0~7),如果字面量中包含的数字超出了应有的范围,就会忽略前缀的零,后面的数字序列会被当成十进制数。下面是几个例子:注意:八进制字面量在严格模式下是无效的,会导致 JavaScript 引擎抛出语法错误原因是ECMAScript 2015ES6中的八进制值通过前缀0o来表示;严格模式下,前缀0会被视为语法错误,如果要表示八进制值,应该使用前缀0o要创建十六进制字面量,必须让真正的数值前缀0x(区分大小写),然后是十六进制数字(09 以 及 AF),十六进制数字中的字母大小写均可下面是几个例子:使用八进制和十六进制格式创建的数值在所有数学操作中都被视为十进制数值。注意:由于 JavaScript 保存数值的方式,实际中可能存在正零(+0)和负零(-0);其中正零和负零在所有情况下都被认为是等同的要定义浮点值,数值中必须包含小数点,而且小数点后面必须至少有一个数字,虽然小数点前面不是必须有整数,但推荐加上下面是几个例子:因为存储浮点值使用的内存空间是存储整数值的两倍,所以ECMAScript总是想方设法把值转换为整数。在小数点后面没有数字的情况下,数值就会变成整数。类似地,如果数值本身就是整数,只是小数点后面跟着 0(如 1.0),那它也会被转换为整数.下面是几个例子:科学记数法用于表示一个应该乘以10 的给定次幂的数值,对于非常大或非常小的数值浮点值可以用科学记数法来表示。ECMAScript中科学记数法的格式要求是一个数值(整数或浮点数)后跟一个大写或小写的字母 e,再加上一个要乘的 10 的多少次幂。如下:解法:3.125 作为系数,乘以 10 的 7 次幂,正常也直接书写出来,只是用科学计数法会更加简洁。科学记数法也可以用于表示非常小的数值默认情况下,ECMAScript会将小数点后至少包含 6 个零的浮点值转换为科学记数法例如,0.0000003 用科学记数法可以表示为 3e-7 ,又例如 0.000000000000000 03 会被转换为 3e-17;不清晰的话请看下图:浮点值的精确度最高可达 17 位小数,但在算术计算中远不如整数精确。举例一个坑, 0.1 加 0.2 得到的不是 0.3,而是 0.30000000000000004,如下:如果两个数值分别是 0.05 和 0.25,或者 0.15 和 0.15,那没问题;但如果是 0.1 和 0.2,如前所述,测试失败由于这种微小的舍入错误,导致很难测试,因此永远不要测试某个特定的浮点值。注意: 之所以存在这种舍入错误,是因为使用了IEEE 754数值,这种错误并非ECMAScript所独有,其他使用相同格式的语言也有这个问题。由于内存的限制,ECMAScript并不支持表示这个世界上的所有数值ECMAScript可以表示的最小数值保存在Number.MIN_VALUE中,这个值在多数浏览器中是 5e-324;可以表示的最大数值保存在Number.MAX_VALUE中,这个值在多数浏览器中是1.7976931348623157e+308。小知识:使用Number.NEGATIVE_INFINITY(负无穷大) 和Number.POSITIVE_INFINITY(正无穷大) 也可以获取正负Infinity。如果某个计算得到的数值结果超出了 JavaScript 可以表示的范围,那么这个数值会被自动转换为一个特殊的Infinity(无穷)值;任何无法表示的负数以-Infinity(负无穷大)表示,任何无法表示的正数以Infinity(正无穷大)表示。如果计算返回正 Infinity 或负 Infinity,则该值将不能再进一步用于任何计算这是因为 Infinity 没有可用于计算的数值表示形式,如果要确定一个值是不是有限大(即介于 JavaScript 能表示的最小值和最大值之间),可以使用isFinite()函数,如下所示:注意:虽然超出有限数值范围的计算并不多见,但总归还是有可能的;因此在计算非常大或非常小的数值时,有必要检测一下计算结果是否超出范围。有一个特殊的数值叫NaN,意思是 Not a Number(不是数值),用于表示本来要返回数值的操作失败了(而不是抛出错误)。比如,用 0 除任意数值在其他语言中通常都会导致错误,从而中止代码执行。但在ECMAScript中,0+0-0相除都会返回NaN:如果分子是非 0 值,分母是有符号 0 或无符号 0,则会返回Infinity-Infinity:任何涉及NaN的操作始终返回NaN(如 NaN/10),并且NaN不等于包括NaN在内的任何值。例如,下面的比较操作会返回 false:ECMAScript提供了isNaN()函数用于判断检测数值。用法:该函数接收一个参数,可以是任意数据类型,然后判断这个参数是否 “不是数值”。性质:把一个值传给isNaN()后,该函数会尝试把它转换为数值;某些非数值的值可以直接转换成数值,如字符串”10″或布尔值;任何不能转换为数值的值都会导致这个函数返回true语法:isNaN(vallue)必传,参数为要检测的值列举了5种常见场景,如下:解释:首先测试的是NaN本身,因为 Not a Nu免费云主机域名mber ,显然会返回 true;接着测试了数值 10和字符串”10″,都返回 false,因为它们的数值都是 10;字符串”blue”不能转换为数值,因此函数返回 true;布尔值 true 可以转换为数值 1,因此返回 false;小知识:虽然不常见,但isNaN()可以用于测试对象。机制:首先会调用对象的valueOf()方法,然后再确定返回的值是否可以转换为数值;如果不能,再调用toString()方法,并测试其返回值。有 3 个函数可以将非数值转换为数值:Number()parseInt()parseFloat()Number()转型函数,可用于任何数据类型。Number(object)参数可选,为一个 JavaScript 对象;如果没有提供参数,则返回0。布尔值,true 转换为 1,false 转换为 0数值,直接返回null,返回 0undefined,返回NaN字符串,应用以下规则:如果字符串包含数值字符,包括数值字符前面带加、减号的情况,则转换为一个十进制数值。因此,Number(“123”)返回 123,Number(“011”) 返回 11(忽略前面的零)如果字符串包含有效的浮点值格式如”1.1″,则会转换为相应的浮点值(忽略前面的零)。如果字符串包含有效的十六进制格式如”0xf“,则会转换为与该十六进制值对应的十进制整数值:如果是空字符串(不包含字符),则返回 0如果字符串包含除上述情况之外的其他字符,则返回NaN对象,调用valueOf()方法,并按照上述规则转换返回的值。如果转换结果是NaN,则调用toString()方法,再按照转换字符串的规则转换从不同数据类型到数值的转换有时候会比较复杂,看一看Number()的转换规则就知道了下面是几个具体的例子:可以看到,字符串“一二三”转换之后是NaN,因为它找不到对应的数值;undefined转换后为NaN;字符串001.101转换后是1.01,因为前面的零被忽略了;最后空字符串null转换后都是0parseInt()函数会解析一个字符串,并返回一个整数,并且更专注于字符串是否包含数值模式。parseInt(string, radix)参数1必选,为要被解析的字符串。参数2可选,表示要解析的数字的基数;该值介于 2 ~ 36 之间。字符串最前面的空格会被忽略,从第一个非空格字符开始转换如果第一个字符不是数值字符、加号或减号,parseInt()立即返回NaN这意味着空字符串也会返回NaN(这一点跟 Number()不一样,它返回 0)。如果第一个字符是数值字符、加号或减号,则继续依次检测每个字符,直到字符串末尾,或碰到非数值字符;如,“1234blue”会被转换为1234,因为 “blue” 会被完全忽略;类似地,”22.5″会被转换为 22,因为小数点不是有效的整数字符。假设字符串中的第一个字符是数值字符,parseInt()函数也能识别不同的整数格式(十进制、八进制、十六进制);换句话说,如果字符串以”0x“开头,就会被解释为十六进制整数;如果字符串以”0“开头,且紧跟着数值字符,在非严格模式下会被某些实现解释为八进制整数请看下面几个例子:不同的数值格式很容易混淆,因此parseInt()也接收第二个参数,用于指定底数(进制数)。如果知道要解析的值是十六进制,那么可以传入 16 作为第二个参数,以便正确解析:事实上,如果提供了十六进制参数,那么字符串前面的”0x“可以省掉:在这个例子中,第一个转换是正确的,而第二个转换失败了。区别在于第一次传入了进制数作为参数,告诉parseInt()要解析的是一个十六进制字符串。而第二个转换检测到第一个字符就是非数值字符,随即自动停止并返回NaN通过第二个参数,可以极大扩展转换后获得的结果类型。比如:因为不传底数参数相当于让parseInt()自己决定如何解析,所以为避免解析出错,建议始终传给它第二个参数。注意:大多数情况下解析的应该都是十进制数,此时第二个参数就要传入10.parseFloat()函数可解析一个字符串,并返回一个浮点数从下标 0 开始检测每个字符,解析到字符串末尾或者解析到一个无效的浮点数值字符为止;与parseInt()不同的是它第一次出现的小数点是有效的,但第二次出现的小数点就无效了,此时字符串的剩余字符都会被忽略parseFloat(string)参数必选,为要被解析的字符串。parseFloat()函数的另一个不同之处在于,它始终忽略字符串开头的零。这个函数能识别前面讨论的所有浮点格式,以及十进制格式(开头的零始终被忽略),十六进制数值始终会返回 ;因为parseFloat()只解析十进制值,因此不能指定底数。下面是几个示例:注意:如果字符串表示整数(没有小数点或者小数点后面只有一个零),则parseFloat()返回整数到此,关于“ECMAScript数据类型之Number类型实例分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注百云主机网站,小编会继续努力为大家带来更多实用的文章!

相关推荐: vue组件间数据传递实现的方法是什么

本篇内容主要讲解“vue组件间数据传递实现的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue组件间数据传递实现的方法是什么”吧!(1)props属性:在父组件中,可以通过子组件标签属性的形式将数据或者…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 03/11 08:45
Next 03/11 08:45

相关推荐