js代码中0 出现NaN

无意中点击项目,发现一个问题,关于项目中有一个值是需要计算得出这个值的然后保留3位小数

我直接用a/b 然后用了toFixed(3)这个方法,然后对等于0 的情况做了处理让值直接等于0 

然后,一直也没发现问题,刚才忽然出现了NaN的情况,检测了一下字段

发现了问题,以下总结以下出现问题的情况

    console.log(0/0) NaN
    console.log(0/1) 0
    console.log(1/0) Infinity
我的问题就是第一种,把0 作为了除数 导致问题的出现

Infinity 这是一种无穷的状态

 

解决完问题后,决定记录一下,因为老是忽略关于0 的情况,下面就记录一下

1:非数字的运算

5 - 'a' // NaN
在计算的时候把a 解析为数字,但是a 不是数字所以出现NaN

2: 一些数学函数的运算

Math.acos(x)  x  -1 到 1 的一个数为参数,返回一个 0 到 pi (弧度)的数值。如果传入的参数值超出了限定的范围,将返回 NaN

 
Math.acos(-2);  // NaN
Math.acos(-1);  // 3.141592653589793
Math.acos(0);   // 1.5707963267948966
Math.acos(0.5); // 1.0471975511965979
Math.acos(1);   // 0
Math.acos(2);   // NaN

Math.sqrt(-1) //NaN  返回正确舍入的一个double值的正平方根 所以如果为负值为NaN

3: 0/0 这种情况就是我上诉的问题

嗯~~~在总结一些类型为false 的情况吧!

undefined(未定义,找不到值时出现)

null(代表空值)

false(布尔值的false,字符串"false"布尔值为true)

0(数字0,字符串"0"布尔值为true)

NaN(无法计算结果时出现,表示"非数值";但是typeof NaN==="number")

""(双引号)或''(单引号) (空字符串,中间有空格时也是true)

 

### JavaScript 中 NaN 的含义和用法 #### 1. NaN 的定义 `NaN` 是 JavaScript 中的一个特殊值,表示“非数字”(Not-a-Number)。它通常出现在无法计算出有效数字结果的情况下。例如,将字符串 `"abc"` 转换为数字时会返回 `NaN`[^2]。 #### 2. NaN 的特性 `NaN` 的一个独特之处在于它不等于任何值,包括自身。因此,直接使用比较运算符检测 `NaN` 是不可行的。 ```javascript console.log(NaN === NaN); // false ``` 为了正确检测 `NaN`,可以使用 `isNaN()` 或更推荐的 `Number.isNaN()` 函数[^2]。 #### 3. 检测 NaN 的方法 - **`isNaN()` 函数**:这是一个全局函数,用于检测某个值是否为 `NaN`。然而,`isNaN()` 存在一些局限性,因为它会尝试将非数字类型转换为数字后再进行判断。 ```javascript console.log(isNaN("abc")); // true,因为 "abc" 转换为数字后是 NaN console.log(isNaN("123")); // false,因为 "123" 转换为数字后是 123 ``` - **`Number.isNaN()` 方法**:这是 ES6 引入的一种更可靠的方法,专门用于检测某个值是否为 `NaN`,而不会尝试类型转换。 ```javascript console.log(Number.isNaN(NaN)); // true console.log(Number.isNaN(123)); // false console.log(Number.isNaN("abc")); // false ``` #### 4. NaN 的生成场景 `NaN` 可以通过以下几种方式生成: - 数学运算无法得出有效结果时: ```javascript console.log(Math.sqrt(-1)); // NaN,负数没有平方根 console.log(0 / 0); // NaN ``` - 字符串到数字的无效转换: ```javascript console.log(Number("abc")); // NaN console.log(+ "xyz"); // NaN ``` - 使用一元加号或算术运算符处理非数字字符串时: ```javascript console.log("abc" - 1); // NaN ``` #### 5. 处理 NaN 的方法 如果需要确保某个值不是 `NaN`,可以在计算前验证输入的有效性。例如: ```javascript function safeParse(value) { const num = Number(value); return Number.isNaN(num) ? null : num; // 如果是 NaN,返回 null } console.log(safeParse("123")); // 123 console.log(safeParse("abc")); // null ``` #### 6. NaN 的用途 尽管 `NaN` 表示错误或无效的结果,但它在调试和错误处理中非常有用。通过检查 `NaN`,可以发现潜在的逻辑问题或输入错误。例如,在用户输入验证中,可以检测是否输入了无效的数字[^1]。 --- ### 示例代码 以下是一个综合示例,展示如何生成和检测 `NaN`: ```javascript // 生成 NaN const invalidNumber = Math.sqrt(-1); // NaN const invalidConversion = Number("abc"); // NaN // 检测 NaN console.log(isNaN(invalidNumber)); // true console.log(Number.isNaN(invalidConversion)); // true // 安全处理 NaN function handleInput(input) { const result = +input; if (Number.isNaN(result)) { return "Invalid input"; } return result; } console.log(handleInput("123")); // 123 console.log(handleInput("abc")); // Invalid input ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值