Infinity 和 -Infinity
认识 Infinity
在 JavaScript 中超出 1.797693134862315E+308 的数值即为 Infinity,小于 -1.797693134862316E+308 的数值为无穷小。
2^n
,其中 n 的取值范围是:(-1075, 1024)
。如果 n 大于等于 1024,则指数的结果为 Infinity;如果 n 小于等于 -1075,则指数的结果为 0。
Math.pow(2, 1024); // Infinity
Math.pow(2, -1075); // 0
Math.pow(2, -1074); // 5e-324
当一个数被 0 除的时候会产生一个错误值 Infinity:
3 / 0 // Infinity
3 / -0 // -Infinity
针对于上面出现的情况,在实际开发中要排除 Infinity。全局函数 isFinite()
可以检测一个值是否是实际的值(既不是 Infinity 也不是 NaN):
isFinite(-Infinity); // false
isFinite(Infinity); // false
isFinite(NaN); // false
isFinite(55); // true
实际运用
查找最大值
在数组中查找最大值,比较前一个数组元素是否大于第二个数组元素,如果大于,那么前一个数组元素可能是最大的,所以,currMax = nums[i]
;如果前一个数组元素小于后一个数组元素,那么前一个数组元素就不是最大值,然后重复比较步骤:
function findMaxNum(nums) {
let currMax = 0;
for (let i = 0; i < nums.length; i++) {
if (i + 1 > nums.length) {
return currMax;
}
if (currMax === 0) {
if (nums[i] > nums[i + 1]) {
currMax = nums[i];
}
} else {
if (nums[i] > currMax) {
currMax = nums[i];
}
}
}
return currMax;
}
这里使用的 for 语句下表取值的方式查找最大值,可以通过下标取得当前下一个元素,初始值可以设置成 max。但是,对于 for...of... 语句来说,不适用,需要用一个默认值来填充,所以-Infinity
是最合适的,因为是无穷小,比任何数字都小。
function findMaxNum(nums) {
let currMax = -Infinity;
for (let n of nums) {
if (n > currMax) {
currMax = n;
}
}
return currMax;
}
查找最小值
在数组中查找最小值,比较前一个数组元素是否小于后一个数组元素,如果小于,那么当前最小值currMin
就是第一个数组元素;如果第一个数组元素大于后一个数组元素,说明第一个数组元素不是最小的,就不给currMin
赋值,然后重复比较步骤:
function findMinNum(nums) {
let currMin = 0;
for (let i = 0; i < nums.length; i++) {
if (i + 1 > nums.length) {
return currMin;
}
if (currMin === 0) {
if (nums[i] < nums[i + 1]) {
currMin = nums[i];
}
} else {
if (nums[i] < currMin) {
currMin = nums[i];
}
}
}
return currMin;
}
同样的,可以跟上面一样,用更加简洁的办法来查找最小值。Infinity
代表无穷大,无论如何数组元素都不可能大于Infinity
,所以,第一个元素不管是多少,都被默认认定是最小值,然后重复上面的比较,元素小于currMin
,就说明这个元素有可能是最小值,否则重复比较:
function findMinNum(nums) {
let currMin = Infinity;
for (const n of nums) {
if (n < currMin) {
currMin = n;
}
}
return currMin;
}
在第三行打印当前循环的元素和 currMin,观察比较过程:
最新文章
- [Python Day5] 常用模块
- 搭建CnetOS6.5x64最小系统及在线yum源的配置
- C# Winform MD5加密学习积累
- 安卓自动化测试(2)Robotium环境搭建与新手入门教程
- iOS核心动画学习整理
- python 传值引用和传参引用
- Vue2.0的通用组件
- 集成iscroll 下拉加载更多 jquery插件
- 企业架构研究总结(38)——TOGAF架构能力框架之架构能力建设和架构治理
- MySql使用存储过程实现事务的提交或者回滚
- codefroces 612E Square Root of Permutation
- 闪回工具flashback
- MVC中 jquery validate 不用submit方式验证表单或单个元素
- angular4,6 引入第三方插件的方法
- idc市场
- [03] mapper.xml的基本元素概述
- json传参 js前端和java后端 的简单例子
- CentOS 7修改yum源为阿里源
- K8s爆严重安全漏洞?有何应对措施与建议
- MATLAB中的快捷键