硝酸钠

基线 广泛可用

此功能已得到很好的建立,可在许多设备和浏览器版本中使用。从那时起,它就可以跨浏览器使用了 2015年7月.

这个硝酸钠全局属性是表示Not-a-Number的值。

试试看

价值

与相同的数值数量。硝酸钠.

的属性属性硝酸钠
可写
可枚举
可配置

描述

硝酸钠是的属性全局对象换句话说,它是全局范围内的变量。

在现代浏览器中,硝酸钠是不可配置、不可写入的属性。即使不是这样,也要避免覆盖它。

有五种不同类型的操作返回硝酸钠:

  • 失败的数字转换(例如,明确的数字转换,如parseInt(“blabla”),编号(未定义)或隐含的,如数学abs(未定义))
  • 结果不是实数的数学运算(例如。数学平方(-1))
  • 不确定形式(例如。0*无限,1**无限,无限/无限,无限-无限)
  • 操作数被强制或被强制的方法或表达式硝酸钠(例如。7**纳米,7*“无稽之谈”)-这意味着硝酸钠具有传染性
  • 无效值用数字表示的其他情况(例如无效值日期 new Date(“blabla”).getTime(),“”.charCodeAt(1))

硝酸钠它的行为不是由JavaScript发明的。它在浮点运算中的语义(包括否!==硝酸钠)由指定IEEE 754标准.硝酸钠的行为包括:

  • 如果硝酸钠参与数学运算(但不是按位运算),结果通常也是硝酸钠(请参见反例(见下文)
  • 什么时候?硝酸钠是任何关系比较的操作数之一(>,<,>=,<=),结果总是.
  • 硝酸钠比较不相等(通过==,!=,===、和!==)任何其他价值-包括其他价值硝酸钠值。

硝酸钠也是虚伪的JavaScript中的值。

示例

NaN测试

要判断某个值是否为硝酸钠,使用编号.isNaN()isNaN()最清楚地确定一个值是否硝酸钠-或者,自硝酸钠是唯一一个与自身不相等的比较值,可以执行如下自我比较x!==x个.

js型
NaN==NaN;//数量。NaN==NaN;//是NaN(NaN);//真的isNaN(数字.NaN);//真的编号.isNaN(NaN);//真的函数值IsNaN(v){返回v!==v;}值IsNaN(1);//值IsNaN(NaN);//真的valueIsNaN(数字.NaN);//真的

但是,请注意isNaN()编号.isNaN():前者将返回真的如果值当前为硝酸钠,或者如果硝酸钠在它被强制为数字后,后者将返回真的仅当值当前为硝酸钠:

js型
isNaN(“你好世界”);//真的Number.isNaN(“hello world”);//

出于同样的原因,使用BigInt值将引发错误isNaN()而不是与编号.isNaN():

js型
是NaN(1n);//TypeError:不允许从“BigInt”转换为“number”。数字.isNaN(1n);//

此外,某些数组方法无法找到硝酸钠,而其他人可以。即,指数型(索引(),lastIndexOf())找不到硝酸钠,而价值导向型(包括())可以:

js型
常量arr=[2,4,NaN,12];arr.indexOf(NaN);//-1arr.includes(NaN);//真的//接受正确定义的谓词的方法总是可以找到NaNarr.findIndex((n)=>数字.isNaN(n));//2

有关的更多信息硝酸钠及其比较,请参见平等比较与相同.

明显不同的NaN值

可以生成两个具有不同二进制表示形式的浮点数,但两者都是硝酸钠,因为在IEEE 754编码,任何带指数的浮点数0x7关闭非零尾数是硝酸钠。在JavaScript中,可以使用类型化数组.

js型
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

硝酸钠通过数学运算进行传播,因此通常足以测试硝酸钠在计算结束时检测一次错误情况。唯一的情况是硝酸钠在使用时悄悄转义指数运算指数为0,它立即返回1没有测试基数的值。

js型
NaN**0===1;//真的

规格

规范
ECMAScript语言规范
#全局对象nan的秒值属性

浏览器兼容性

BCD表仅在浏览器中加载

另请参见