JS--JavaScript数值计算与类型转换详解
JavaScript数值计算
JavaScript在执行数值运算时,常会出现浮点数溢出问题。
例如:0.1 + 0.2 不等于 0.3
num = 0.1 + 0.2;//0.300000000000000004
这是JavaScript中最常报告的Bug,并且这是遵循二进制浮点数算数标准(IEEE 754)而导致的结果。这个标准适合很多应用,但它违背了数字基本常识。
幸运的是,浮点数中的整数运算是精准的,所以小数表现出来的问题可以通过指定精度来避免。
num = (1 + 2) / 10;//0.3
这种处理经常在货币计算中用到,在计算货币时当然期望得到精确的结果。例如,元可以通过乘以100而全部转成分,然后就可以准确地将每项相加,求和后的结果可以除以100转换回元。
JavaScript能够自动转换变量的数据类型,这种转换是一种隐性行为。在自动转换数据类型时,JavaScript一般遵循:如果某个类型的值被用于需要其它类型的值的环境中,JavaScript就自动将这个值转换成需要的类型,具体如下表:
值(value) | 字符串操作环境 | 数字运算环境 | 逻辑运算环境 | 对象操作环境 |
---|---|---|---|---|
undefined | “undefined” | NaN | false | Error |
null | “null” | 0 | false | Error |
非空字符串 | 不转换 | 字符串对应的数字或NaN | true | String |
空字符串 | 不转换 | 0 | false | String |
0 | “0” | 不转换 | false | Number |
NaN | “NaN” | 不转换 | false | Number |
Infinity | “Infinity” | 不转换 | true | Number |
Number.POSITIVE_INFINITY | “Infinity" | 不转换 | true | Number |
Number.NEGATIVE_INFINITY | “-Infinity” | 不转换 | true | Number |
Number.MAX_VALUE | “1.7976931348623157e” + 308 | 不转换 | true | Number |
Number.MIN_VALUE | ”5e-324" | 不转换 | true | Number |
其它所有数字 | ”数字的字符串值“ | 不转换 | true | Number |
true | “true” | 1 | 不转换 | Boolean |
false | ”false" | 0 | 不转换 | Boolean |
对象 | toString() | valueOf()或toString()或NaN | true | 不转换 |
如果把非空对象用在逻辑运算环境中,则对象被转换为true。此时的对象包括所有类型的对象,即使是值为false的包装对象也转换为true。
如果把对象用在数值运算环境中,则对象会被自动转换为数字,如果转换失败,则返回值NaN。被转换为数值0.如果数组仅包含一个数字元素,则被转换为该数字的数值。如果数组包含多个元素,或者仅包含一个非数字元素,则返回NaN。
当对象用于字符串环境中时,JavaScript能够调用toString()方法把对象转换为字符串再进行相关计算。当对象与数值进行加号运算时,则会尝试将对象转换为数值,然后参与求和运算。如果不饿能够将对象转换为有效数值,则执行字符串连接操作。
JS--JavaScript数值计算与类型转换详解相关推荐
- [js]JavaScript Number.toPrecision() 函数详解
[js]JavaScript Number.toPrecision() 函数详解 JavaScript: numberObject.toPrecision( [ precision ] ) 如果没有提 ...
- javascript中强制类型转换详解+总结
javascript中一共有六种类型:Number,String,Boolean,Undefined,Object,function.可以用typeof来查看声明的变量的类型.注意,typeof是操作 ...
- 用html js制作迷宫,JavaScript生成随机迷宫详解
本篇教程介绍了JavaScript生成随机迷宫详解,希望阅读本篇文章以后大家有所收获,帮助大家对JavaScript的理解更加深入. < #先看生成随机迷宫的代码吧↓ 1 2 3 生成随机迷宫v ...
- 众望所归的《JAVASCRIPT凌厉开发--EXT详解与实践 》终于上市了!
大家好,我是这本书的策划编辑,经过努力,这本书终于上市了. 从创作开始,我们的目标就是写一本真正适合开发者参考和借鉴的EXT书,写作过程中,经过了无数次讨论和痛苦修订,感谢三位作者付出的艰辛劳动. 这 ...
- Javascript常用的设计模式详解
Javascript常用的设计模式详解 阅读目录 一:理解工厂模式 二:理解单体模式 三:理解模块模式 四:理解代理模式 五:理解职责链模式 六:命令模式的理解: 七:模板方法模式 八:理解javas ...
- js购物车功能php,使用JS实现购物车功能步骤详解
这次给大家带来使用JS实现购物车功能步骤详解,使用JS实现购物车功能的注意事项有哪些,下面就是实战案例,一起来看一下. 我们肯定都很熟悉商品购物车这一功能,每当我们在某宝某东上购买商品的时候,看中了哪 ...
- JS 中 valueOf() 方法的详解
JS 中 valueOf() 方法的详解 JavaScript 中的 valueOf() 方法用于返回指定对象的原始值,若对象没有原始值,则将返回对象本身.通常由JavaScript内部调用,而不是在 ...
- JS es6的Class类详解
文章目录 JS es6的Class类详解 class基本语法 Class的基本语法之constructor Class的基本语法之类的调用方式 Class的基本语法之getter和setter Cla ...
- JavaScript中getBoundingClientRect()方法详解
JavaScript中getBoundingClientRect()方法详解 getBoundingClientRect() 这个方法返回一个矩形对象,包含四个属性:left.top.right和bo ...
- js showModalDialog参数的使用详解(转)
js showModalDialog参数的使用详解_javascript技巧_脚本之家 http://www.jb51.net/article/45281.htm 本篇文章主要是对js中showMod ...
最新文章
- 嵌入式linux应用程序升级,基于嵌入式Linux平台的应用升级机制的研究与设计
- 书值 | 第 2 期:成为技术管理者,思维上应该如何转变?
- Hibernate:SQL查询 addScalar()或addEntity()
- C# WINFORM中的combobox.items.add实现像web开发那样,添加显示内容text和实际value值
- Dart核心基础List概述
- 正则不等于一个字符串_王晓阳 | 物理主义不等于物理学主义——表述物理主义的一个新方案...
- 【滤波器】基于matlab GUI分数延迟滤波器设计【含Matlab源码 1347期】
- No controller found
- redhat官网操作文档查找
- 遥感导论(梅安新版)知识点概括
- 李宏毅2020机器学习笔记2——CXK
- IT毕业生给学弟学妹们的真心话——离校座谈记录
- c语言字符数组的实际长度,C语言中,当计算字符数组长度时,用sizeof 和strlen 的原理及两者的区别...
- 在overleaf中使用bibtex引用参考文献
- View的foreground属性
- 网易运营微专业 目录
- JSP SSH图书系统myeclipse开发sql数据库BS模式java编程mvc结构 详细设计
- Android Studio 中模拟器无法打开,提示Error launching emulator
- 过来看~/(≧▽≦)/~啦啦啦!!各种书本课后答案!——第二部分:【化学物理】
- CSS根据屏幕分辨率宽度自动适应的办法
热门文章
- “百度开放云编程马拉松”成都赛区19件作品及团队介绍
- 边缘检测之Sobel算子Prewitt算子
- usbserialch340驱动安装失败_CH340驱动|CH340系列USB转串口驱动下载win7/win10 64位 - 欧普软件下载...
- linux 设置固定ip的方法
- 区块链100讲:如果连电子钱包都不懂,还谈什么区块链开发(有彩蛋)
- css内联样式!important
- 计算机备份打印机驱动程序,windows7如何快速备份打印机驱动
- 高频谐振功率放大器仿真
- python数据采集卡_高速数据采集卡在雷达信号的采集与分析中的应用笔记
- ps4html5播放器,PS4迎来全新媒体播放器 支持多种视频音频格式