硝酸钠
试试看
价值
|
|
---|---|
描述
失败的数字转换(例如,明确的数字转换,如 parseInt(“blabla”) , 编号(未定义) 或隐含的,如 数学abs(未定义) ) 结果不是实数的数学运算(例如。 数学平方(-1) ) 不确定形式(例如。 0*无限 , 1**无限 , 无限/无限 , 无限-无限 ) 操作数被强制或被强制的方法或表达式 硝酸钠 (例如。 7**纳米 , 7*“无稽之谈” )-这意味着 硝酸钠 具有传染性 无效值用数字表示的其他情况(例如无效值 日期 new Date(“blabla”).getTime() , “”.charCodeAt(1) )
如果 硝酸钠 参与数学运算(但不是 按位运算 ),结果通常也是 硝酸钠 (请参见 反例 (见下文) 什么时候? 硝酸钠 是任何关系比较的操作数之一( > , < , >= , <= ),结果总是 假 . 硝酸钠 比较不相等(通过 == , != , === 、和 !== )任何其他价值-包括其他价值 硝酸钠 值。
示例
NaN测试
NaN==NaN;// 假 数量。 NaN==NaN;// 假 是NaN(NaN);// 真的 isNaN(数字.NaN);// 真的 编号.isNaN(NaN);// 真的 函数值IsNaN(v){ 返回v!== v; } 值IsNaN(1);// 假 值IsNaN(NaN);// 真的 valueIsNaN(数字.NaN);// 真的
isNaN(“你好世界”);// 真的 Number.isNaN(“hello world”);// 假
是NaN(1n);// TypeError:不允许从“BigInt”转换为“number”。 数字.isNaN(1n);// 假
常量arr=[2,4,NaN,12]; arr.indexOf(NaN);//- 1 arr.includes(NaN);// 真的 //接受正确定义的谓词的方法总是可以找到NaN arr.findIndex((n)=>数字.isNaN(n));// 2
明显不同的NaN值
const f2b=(x)=>新Uint8Array(新Float64Array([x]).buffer); const b2f=(x)=>新的Float64Array(x.buffer)[0]; //获取NaN的字节表示 常数n=f2b(NaN); 常数m=f2b(NaN); //更改符号位,这对NaN来说无关紧要 n[7]+=2**7; //n[0]+=2**7; 对于big-endian处理器 常数nan2=b2f(n); 控制台.log(nan2);// 硝酸钠 console.log(Object.is(nan2,NaN));// 真的 控制台.log(f2b(NaN));// Uint8Array(8)[0,0,0,0,0,0,127] 控制台.log(f2b(nan2));// Uint8Array(8)[0,0,0,0,0,0,1248255] //更改第一位,这是尾数中最不重要的位,对NaN来说无关紧要 m[0]=1; //m[7]=1; 对于大端处理器 常数nan3=b2f(m); 控制台.log(nan3);// 硝酸钠 console.log(Object.is(nan3,NaN));// 真的 控制台.log(f2b(NaN));// Uint8Array(8)[0,0,0,0,0,0,127] 控制台.log(f2b(nan3));// Uint8Array(8)[1,0,0,0,0,0,248,127]
无声逃离NaN
NaN**0===1;// 真的