认识 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,观察比较过程:

最新文章

  1. [Python Day5] 常用模块
  2. 搭建CnetOS6.5x64最小系统及在线yum源的配置
  3. C# Winform MD5加密学习积累
  4. 安卓自动化测试(2)Robotium环境搭建与新手入门教程
  5. iOS核心动画学习整理
  6. python 传值引用和传参引用
  7. Vue2.0的通用组件
  8. 集成iscroll 下拉加载更多 jquery插件
  9. 企业架构研究总结(38)——TOGAF架构能力框架之架构能力建设和架构治理
  10. MySql使用存储过程实现事务的提交或者回滚
  11. codefroces 612E Square Root of Permutation
  12. 闪回工具flashback
  13. MVC中 jquery validate 不用submit方式验证表单或单个元素
  14. angular4,6 引入第三方插件的方法
  15. idc市场
  16. [03] mapper.xml的基本元素概述
  17. json传参 js前端和java后端 的简单例子
  18. CentOS 7修改yum源为阿里源
  19. K8s爆严重安全漏洞?有何应对措施与建议
  20. MATLAB中的快捷键

热门文章

  1. 【面试真题】ThoughtWorks-编程结对技术面试(一面)-2022年2月11日
  2. http 缓存 笔记
  3. C#不提升自己程序的权限实现操作注册表
  4. django中如何开启事务
  5. jQuery事件与动态效果
  6. JS切换图片
  7. 分享一个项目中在用的图片处理工具类(图片缩放,旋转,画布格式,字节,image,bitmap转换等)
  8. [OpenCV实战]32 使用OpenCV进行非真实感渲染
  9. 纸张尺寸【第十三届蓝桥杯省赛C++C组】
  10. P1162填涂颜色——题解