首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Under the Hood: NaN of JS

一、NaN 的本质 我们知道 NaN(Not A Number) 会出现在任何不符合实数领域内计算规则的场景下。比如 Math.sqrt(-1)就是 NaN,而 1/0 就不是 NaN。...同时需要注意的是,NaN 只会出现在浮点类型中,而不会出现在 int 类型里(当然 JS 并没有这个概念) 什么意思?用你熟悉的任何支持 int 和 double 两种类型的语言(比如 C)。...---- 两种 NaN 如果再细分的话,NaN 还可分为两种: Quiet NaN Signaling NaN 从性质上,可以认为第一种 NaN 属于“脾气比较好”,比较“文静”的一种,你甚至可以直接定义它...比如我们在 JS 中可以使用类似于 NaN+1,NaN+'123' 的操作,还不会报错。 而 Signaling NaN 就是一个“爆脾气”。...NaN 不等于 NaN ?

1.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    前端学习之JavaScript中的 NaN isNaN

    console.log(Number.NaN); // NaN 在 ECMAScript v1 和其后的版本中,还可以用预定义的全局属性 NaN 代替 Number.NaN 。...console.log(NaN); // NaN 在以下两种场景中,可能会产生 NaN 值 。...【1】表达式计算 一个表达式中如果有减号 (-)、乘号 (*) 或 除号 (/) 等运算符时,JS 引擎在计算之前,会试图将表达式的每个分项转化为 Number 类型(使用 Number(x) 做转换)...类型,这是因为JS表达式的执行顺序是按照运算符的优先级从左到右依次进行的,如果加号 (+) 两边的变量都是 Number 类型时,才会做数字相加运算,如果其中有一个变量是字符串,则会将两边都作为字符串相加...另外,一元加操作符也可以实现 Number 相同的作用。

    1.1K30

    分享18个用于处理 null、NaN 和undefined 的 JS 代码片段

    检查是否为null: 要检查变量是否为 null,可以使用严格相等运算符 (===) 将其直接 null 进行比较: if (variable === null) { // Code to handle...检查 NaN: 要检查值是否为 NaN(非数字),可以使用 isNaN() 函数: if (isNaN(value)) { // Code to handle NaN value } 4....将 null 或 undefined 转换为默认对象: 要将 null 或 undefined 转换为默认对象,可以将逻辑 OR 运算符空对象文字结合使用: const result = variable...检查值是否为 null、undefined或 NaN: 将 null、未定义和 NaN 检查逻辑 OR 运算符结合起来: if (variable === null || typeof variable...== 'undefined'); 结论: 以上就是我今天您分享的18 个 JavaScript 代码片段,希望这些代码片段对您有用,因为,这些代码片段可以帮助您有效地处理代码中的 null、NaN

    62850

    js中的相等相等

    在转换不同的数据类型时,相等和不相等操作符遵循下列基本规则: 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值——false 转换为0,而 true 转换为1; 如果一个操作数是字符串,另一个操作数是数值...,在比较相等性之前先将字符串转换为数值; 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类 型值按照前面的规则进行比较; null 和undefined 是相等的...要比较相等性之前,不能将null 和undefined 转换成其他任何值。 如果有一个操作数是NaN,则相等操作符返回false,而不相等操作符返回true。...重要提示: 即使两个操作数都是NaN相等操作符也返回false;因为按照规则,NaN 不等于NaN。 如果两个操作数都是对象,则比较它们是不是同一个对象。...如果两个操作数都指向同一个对象, 则相等操作符返回true;否则,返回false。

    1.8K51

    【面试利器】原生JavaScript灵魂拷问,你能答上多少(一)

    JS类型之问——概念检测篇 第一问:JS中的数据类型有哪些?...NaN 有个非常特殊的特性, NaN 任何值都不相等,包括它自身 NaN === NaN // false NaN == NaN // false 复制代码 鉴于这个独特的特性,可以手撕一个比较简单的判断函数...Number.isNaN (推荐使用) isNaN() 相比,Number.isNaN() 不会自行将参数转换成数字,只有在参数是值为 NaN 的数字时,才会返回 true。...Number 的具体规则,ES5 规范中给了一个对应的结果表 类型结果undefinedNaNnull+0BooleanNaNundefined参数为true返回1;false返回+0Number返回相等的值...js 引擎会把 {} + 1 解析成1个代码块和1个+1,最终输出结果为 1 答案 1[object Object] 1 复制代码 第十三问:[]{}的相加的结果是多少?

    90520

    如何答一道惊艳面试官的数组去重问题?

    必知必会】高阶函数详解实战)。...性能考虑(是想要最快的速度查到数据?) 为了测试这些解法的性能,我写了一个测试模版,用来计算数组去重的耗时。...” 兼容性场景考虑(数组中是否包含对象,NaN等?) 我们要考虑这个数组中是否有null、undefined、NaN、对象如果二者都出现,上面的所有数组去重方法并不是都是适用哦,下面详细说一下。...先说一下 == 和 === 区别 === 严格相等,会比较两个值的类型和值== 抽象相等,比较时,会先进行类型转换,然后再比较值 想更详细了解转换过程的可以看这篇文章js 中 == 和 === 的区别...ES6中的Set去重 [1, "1", null, undefined, String, String, /a/, /a/, NaN] 对象不去重 NaN 去重 内存考虑(去重复过程中,是想要空间复杂度最低

    1.2K40

    【说站】js浮点数精度丢失的问题及解决

    js浮点数精度丢失的问题及解决 说明 1、在数学计算中,小数会有一定的误差,这是计算机本身的bug,不仅是js语言,其他语言也有这个问题。... 2.NaN任何数字都不相等,包括它的本身        * 3.NaN任何数字计算得到的都是NaN       isNaN(数据):判断一个数据是不是NaN,结果为布尔类型  true:是 false...NaN );  //number       //2.NaN任何数字都不等,包含它本身     console.log ( NaN == 0 );   //false     console.log ...( NaN == NaN );   //false       //3.NaN任何数字计算得到的都是NaN     console.log ( NaN + 100 );   //NaN       /... ( 123 ) );  //false     //如果检测的数据不是number类型,js编译器会尝试着将这个数据转化为number类型,然后再判断     //这种数据类型转换称为隐式转换:下一小节讲解

    3K30

    重学js之JavaScript基本概念(下)- 运算符

    布尔操作符 布尔操作符的重要性堪比相等操作符。布尔操作符一个有3个,非(NOT)、(AND)、或(OR) 1.1 逻辑非 逻辑非操作符由一个叹号(!)表示,可以应用于ES中的任何值。...一个操作数为NaN,结果为NaN 3. Infinity 0 相乘,结果为NaN 4. Infinity 非0相乘,结果为Infinity 或 - Infinity 5....一个操作数是NaN,则相等返回false,不相等 返回true。如果两个操作数都是NaN, 也是返回false, 因为 NaN != NaN 7....可以向函数传递任意数量的参数,并且可以通过 argument 对象来访问这些参数 函数不能重载 本文章为《重学js系列》的第三章第三篇,后续还为大家带来js基础的更多文章。...重学JS系列: 1、重学js之JavaScript简介 2、重学js之在HTML中使用JavaScript 3、重学js之JavaScript基本概念(上)- 数据类型 4、重学js之JavaScript

    70320

    我对 JS相等和全等操作符转化过程一直很迷惑,直到有了这份算法

    例 5 NaN === NaN // false, IEA 规则 5 操作数是相同的类型,但是IEA 规则4 表明任何 NaN 比较都是不相等的。...普通的 JS 对象,{}或 new object(),通常被转换成 "[object Object]" 数组通过将它的元素“,”分隔符连接转换为。...根据EEA规则1,将相等转换为全等运算进行比较) NaN === NaN(根据IEA规则4,操作数严格不相等) false 例 6 [''] == '' // true 上面的转换步骤: ['']...== 1(两个操作数都是数字,因此使用 EEA规则1 将相等转换为全等运算进行比较) NaN === 1(根据 IEA规则4,没有什么是 NaN 相等的,结果是 false) false 实用技巧...总结 相等和全等运算符号可能是最常用的运算符之一。理解它们是编写稳定且bug较少的 JS 的步骤之一。

    97020

    精读《Records & Tuples 提案》

    === 原生支持 immutable 判等,是 js 原生支持 immutable 的一个重要表现,所以其判等逻辑普通的对象判等大相径庭: 首先看上去值相等,就真的相等,因为基础类型仅做值对比: assert...== Box({})); 对于 +0 -0 之间,NaN NaN 对比,都可以安全判定为相等,但 Object.is 因为是对普通对象的判断逻辑,所以会认为 #{ a: -0 } 不等于 #{ a...a: NaN } == #{ a: NaN }); assert(#[NaN] == #[NaN]); assert(#[1] !...开发者会熟悉这套语法? 由于最大程度保证了普通对象数组处理、API 的一致性,所以开发者上手应该会比较容易。 为什么不像 Immutablejs 一样使用 .get .set 方法操作?... Readonly Collections 的关系? 互补。 可以基于 Class 创建 Record 实例? 目前不考虑。 TS 也有 Record Tuple 关键字,之间的关系是?

    1.3K20
    领券