JavaScript基础-全局常亮属性-

本文详细介绍了JavaScript中的全局常量Infinity表示无穷大,NaN表示非数字值,以及undefined的角色和用法。Infinity的特性是任何数值乘以它都为正无穷,NaN通常在计算错误或字符串转换数字失败时出现,而undefined是未初始化变量、未传入实参的形参或无返回值函数的默认值。判断值是否等于Infinity或NaN应使用严格相等运算符,对于未声明的全局变量,可以检测全局对象的同名属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Infinity

全局属性 Infinity 是一个数值,表示无穷大。

Infinity 属性的属性特性:
writablefalse
enumerablefalse
configurablefalse

语法

Infinity 

描述

Infinity 是全局对象(global object)的一个属性,即它是一个全局变量。

Infinity 的初始值是 Number.POSITIVE_INFINITYInfinity(正无穷大)大于任何值。该值和数学意义上的无穷大很像,例如任何正值乘以 Infinity 为 Infinity, 任何数值(除了Infinity 和 -Infinity)除以 Infinity 为 0。

2.NaN

全局属性 NaN 表示 Not-A-Number 的值。

Property attributes of NaN
Writableno
Enumerableno
Configurableno

描述

NaN 是一个全局对象的属性。

NaN 属性的初始值就是 NaN,和 Number.NaN 的值一样。在现代浏览器中(ES5中), NaN 属性是一个不可配置(non-configurable),不可写(non-writable)的属性。但在ES3中,这个属性的值是可以被更改的,但是也应该避免覆盖。

在编码很少直接使用到 NaN。通常都是在计算失败时,作为 Math 的某个方法的返回值出现的(例如:Math.sqrt(-1))或者尝试将一个字符串解析成数字但失败了的时候(例如:parseInt("blabla"))。

判断一个值是否是NaN

等号运算符(=====) 不能被用来判断一个值是否是 NaN。必须使用 Number.isNaN() isNaN() 函数。

NaN === NaN;        // false
Number.NaN === NaN; // false
isNaN(NaN);         // true
isNaN(Number.NaN);  // true


3.undefined

undefined有多重角色,通常情况下,我们所说的undefined都指的是全局对象的一个属性"undefined".

描述

在JavaScript中,undefined这个词有多重含义.首字母大写的Undefined表示的是一种数据类型,小写的undefined表示的是属于这种数据类型的唯一的一个值.但这两种undefined都只能存在于文档或规范中,不能存在于JavaScript代码中.在JavaScript代码中,你看到的undefined最有可能是全局对象的一个属性,该属性的初始值是就是前面所说的原始值undefined,还有种情况就是,这个undefined是个局部变量,就像其他普通变量一样,没有任何特殊性,它的值不一定是undefined,但通常情况下都是的.下面我们所说的undefined,都指的是window.undefined这个属性.

在ES3中(Firefox4之前),window.undefined就是一个普通的属性,你完全可以把它的值改变成为任意的真值,但在ES5中((Firefox4之后),window.undefined成了一个不可写,不可配置的数据属性,它的值永远是undefined.

一个未初始化的变量的值为undefined,一个没有传入实参的形参变量的值为undefined,如果一个函数什么都不返回,则该函数默认返回undefined.

你可以使用严格相等运算符来判断一个值是否是undefined:

var x;
if (x === undefined) {
   // 执行到这里
}
else {
   // 不会执行到这里
}
注: 这里必须使用严格相等运算符===,而不能使用普通的相等运算符==,因为 x == undefined成立还可能是因为 x为 null, 在JavaScript中null== undefined是返回true的.

另外,还可以使用typeof来判断:

var x;
if (typeof x === 'undefined') {
   // 执行到这里
}

有时必须使用typeof的原因是,如果一个变量根本没有被声明,只有使用typeof判断才不会报错,用相等运算符判断会抛出异常.

// x没有被声明过
if (typeof x === 'undefined') { // 不会报错
   // these statements execute
}

if(x === undefined){ // 抛出ReferenceError异常

}

不过如果要检测的变量是个全局变量,可以不使用typeof.可以通过检测全局对象的同名属性来代替:

// x可能没有被声明过,但如果已经声明了的话,x是个全局变量
if (window.x === undefined) { // 即使window.x不存在,也不会报错
   // 可能会执行到这里
}

if(x === undefined){ // 如果window.x不存在,则会抛出ReferenceError异常

}

4.null

值 null 是一个 JavaScript 字面量,表示空值(null or an "empty" value),即没有对象被呈现(no object value is present)。它是 JavaScript 原始值 之一。

描述

null 是一个字面量(而不是全局对象的一个属性,undefined 是)。在 APIs 中,null 常被放在期望一个对象,但是不引用任何对象的参数位置。当检测 null 或 undefined 时,注意相等(==)与全等(===)两个操作符的区别 (前者会执行类型转换)。

// foo does not exist, it is not defined and has never been initialized:
> foo
"ReferenceError: foo is not defined"

// foo is known to exist now but it has no type or value:
> var foo = null; foo
"null"
 
 
 
 
 
 
 

null 与 undefined 的不同点:

typeof null        // object (bug in ECMAScript, should be null)
typeof undefined   // undefined
null === undefined // false
null  == undefined // true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值