JavaScript全局对象

42 阅读4分钟

JavaScript提供了一个全局对象,它有一组属性、函数和对象,可以全局访问,没有命名空间。

这些属性是。

  • Infinity
  • NaN
  • undefined

函数是。

  • decodeURI()
  • decodeURIComponent()
  • encodeURI()
  • encodeURIComponent()
  • eval()
  • isFinite()
  • isNaN()
  • parseFloat()
  • parseInt()

这些是对象。

和错误。

  • Error
  • EvalError
  • RangeError
  • ReferenceError
  • SyntaxError
  • TypeError
  • URIError

我在这个JavaScript错误参考文章中描述了错误。

现在让我们在这里描述一下全局属性和函数。

Infinity

Infinity 在JavaScript中是一个代表无限的值。

正的无穷大。要得到负无穷大,可以使用 操作符:-Infinity

这些等同于Number.POSITIVE_INFINITYNumber.NEGATIVE_INFINITY

将任何数字加到Infinity ,或将任何数字乘以Infinity ,仍然可以得到Infinity

NaN

全局NaN 值是Not a Number 的缩写。它是由零除以零、无效的parseInt()操作或其他操作返回的。

parseInt()    //NaN
parseInt('a') //NaN
0/0           //NaN

一个需要特别考虑的问题是,一个NaN 的值永远不会等于另一个NaN 的值。你必须使用isNaN() 全局函数来检查一个值是否被评估为NaN

NaN === NaN //false
0/0 === NaN //false
isNaN(0/0)  //true

undefined

全局undefined 属性持有原始值undefined

运行一个没有指定返回值的函数会返回undefined

const test = () => {}
test() //undefined

NaN 不同,我们可以将一个undefined 值与undefined 进行比较,并得到 true。

通常使用typeof 操作符来确定一个变量是否是未定义的。

if (typeof dog === 'undefined') {

}

decodeURI()

执行的是 "A "的相反操作。encodeURI()

decodeURIComponent()

执行与之相反的操作encodeURIComponent()

encodeURI()

这个函数被用来对一个完整的URL进行编码。它确实将所有的字符编码为它们的HTML实体,除了那些在URI结构中具有特殊含义的字符,包括所有的字符和数字,再加上那些特殊字符。

~!@#$&*()=:/,;?+-_.

例子。

encodeURI("http://flaviocopes.com/ hey!/")
//"http://flaviocopes.com/%20hey!/"

encodeURIComponent()

encodeURI() 相似,encodeURIComponent() 是为了有一个不同的工作。

它不是用来对整个URI进行编码,而是对URI的一部分进行编码。

除了在URI结构中具有特殊意义的字符外,它确实将所有的字符编码为HTML实体,包括所有的字符和数字,以及那些特殊字符。

-_.!~*'()

例子。

encodeURIComponent("http://www.example.org/a file with spaces.html")
// "http%3A%2F%2Fwww.example.org%2Fa%20file%20with%20spaces.html"

eval()

这是一个特殊的函数,它接收一个包含JavaScript代码的字符串,并对其进行评估/运行。

这个函数很少使用,这是有原因的:它可能是危险的。

我建议阅读这篇关于这个问题的文章

isFinite()

如果作为参数传递的值是有限的,返回真。

isFinite(1)                        //true
isFinite(Number.POSITIVE_INFINITY) //false
isFinite(Infinity)                 //false

isNaN()

如果作为参数传递的值被评估为NaN ,则返回true。

isNaN(NaN)        //true
isNaN(Number.NaN) //true
isNaN('x')        //true
isNaN(2)          //false
isNaN(undefined)  //true

这个函数非常有用,因为一个NaN 值永远不等于另一个NaN 值。你必须使用isNaN() 全局函数来检查一个值是否被评估为NaN

0/0 === NaN //false
isNaN(0/0)  //true

parseFloat()

parseInt() 一样,parseFloat() 用于将一个字符串值转换为数字,但保留小数部分。

parseFloat('10,000', 10) //10     ❌
parseFloat('10.00', 10)  //10     ✅ (considered decimals, cut)
parseFloat('10.000', 10) //10     ✅ (considered decimals, cut)
parseFloat('10.20', 10)  //10.2   ✅ (considered decimals)
parseFloat('10.81', 10)  //10.81  ✅ (considered decimals)
parseFloat('10000', 10)  //10000  ✅

parseInt()

这个函数用于将一个字符串值转换成数字。

对于整数,另一个好的解决方案是调用parseInt() 函数。

const count = parseInt('1234', 10) //1234

不要忘了第二个参数,也就是小数点,对于小数来说总是10,否则转换可能会试图猜测小数点,并给出意外的结果。

parseInt() 试图从一个不只包含数字的字符串中获得一个数字。

parseInt('10 lions', 10) //10

但如果字符串不是以数字开头,你会得到NaN (不是数字)。

parseInt("I'm 10", 10) //NaN

另外,就像Number一样,它在数字之间的分隔符也不可靠。

parseInt('10,000', 10) //10     ❌
parseInt('10.00', 10)  //10     ✅ (considered decimals, cut)
parseInt('10.000', 10) //10     ✅ (considered decimals, cut)
parseInt('10.20', 10)  //10     ✅ (considered decimals, cut)
parseInt('10.81', 10)  //10     ✅ (considered decimals, cut)
parseInt('10000', 10)  //10000  ✅