>  기사  >  웹 프론트엔드  >  자바스크립트 전역객체_기본지식

자바스크립트 전역객체_기본지식

WBOY
WBOY원래의
2016-05-16 18:48:191091검색

Global对象

Global对象是ECMAScript中最特别的对象,因为实际上它根本不存在。如果尝试编写下面的代码,将得到错误:

错误消息显示Global不是对象,但刚才不是说Global是对象吗?没错。这里需要理解的主要概念是,在ECMAScript中,不存在独立的函数,所有函数都必须是某个对象的方法。本书前面介绍的函数,如isNaN()、isFinite()、parseInt()和parseFloat()等,看起来都像独立的函数。实际上,它们都是Global对象的方法。而且Global对象的方法不止这些。

encodeURI()和encodeURIComponent()方法用于编码传递给浏览器的URI(统一资源标识符)。有效的URI不能包含某些字符,如空格。这两个方法用于编码URI,这样用专门的UTF-8编码替换所有的非有效字符,就可以使浏览器仍能够接受并理解它们。

encodeURI()方法用于处理完整的URI(例如,http://www.wrox.com/illegal value.htm),而encodeURIComponent()用于处理URI的一个片断(如前面的URI中的illegal value.htm)。这两个方法的主要区别是encodeURI()方法不对URI中的特殊字符进行编码,如冒号、前斜杠、问号和英镑符号,而encodeURIComponent()则对它发现的所有非标准字符进行编码。例如:

这段代码输出两个值:

可以看到,除空格外,第一个URI无任何改变,空格被替换为%20。第二个URI中的所有非字母数字字符都被替换成它们对应的编码,基本上使这个URI变得无用。这就是encodeURI()可以处理完整URI,而encodeURIComponent()只能处理附加在已有URI末尾的字符串的原因。

自然,还有两个方法用于解码编码过的URI,即decodeURI()和decodeURIComponent()。如你所料,这两个方法所做的恰与其对应的方法相反。decodeURI()方法只对用encodeURI()方法替换的字符解码。例如,%20将被替换为空格,而%23不会被替换,因为它表示的是英镑符号(#),encodeURI()并不替换这个符号。同样的,decodeURIComponent()会解码所有encodeURIComponent()编码过的字符,意味着它将对所有的特殊值解码。例如:

这段代码输出两个值:

在这个例子中,变量uri存放的是用encodeURIComponent()编码的字符串。生成的值说明了应用两个解码方法时会发生的事情。第一个值由decodeURI()输出,把%20替换成空格。第二个值由decodeURIComponent()输出,替换所有的特殊。

这些URI方法encodeURI()encodeURIComponent()decodeURI()decodeURICom- ponent()代替了BOM的escape()unescape()方法。URI方法更可取,因为它们会对所有Unicode符号编码,而BOM方法只能对ASCII符号正确编码。尽量避免使用escape()unescape()方法。

마지막 메서드는 아마도 전체 ECMAScript 언어에서 가장 강력한 메서드인 eval() 메서드일 것입니다. 이 메서드는 실행될 ECMAScript(또는 JavaScript) 문자열인 하나의 매개 변수를 허용하는 전체 ECMAScript 인터프리터와 같습니다. 예:

이 코드 줄은 기능적으로 다음 코드와 동일합니다.

인터프리터가 eval() 호출을 찾으면 인수를 실제 ECMAScript 문으로 해석하고 함수가 있는 위치에 삽입합니다. 이는 eval() 호출 내에서 참조되는 변수가 매개변수 외부에서 정의될 수 있음을 의미합니다.

여기서 msg 변수는 eval() 호출 컨텍스트 외부에서 정의되며 코드의 두 번째 줄이 실제 코드 줄로 대체되므로 경고에는 여전히 "hello world"라는 텍스트가 표시됩니다. 마찬가지로 함수나 변수는 eval() 호출 내에서 정의한 다음 함수 외부의 코드에서 참조할 수 있습니다.

여기서 sayHi() 함수는 eval() 호출 내부에 정의되어 있습니다. 호출이 실제 함수로 대체되기 때문에 다음 줄에서 sayHi()를 계속 호출할 수 있습니다.

이 기능은 매우 강력하지만 매우 위험합니다. eval()을 사용할 때, 특히 사용자가 입력한 데이터를 전달할 때 특히 주의하세요. 악의적인 사용자가 사이트나 애플리케이션의 보안을 손상시키는 값을 삽입할 수 있습니다(코드 삽입이라고 함).

전역 객체에는 메서드뿐만 아니라 속성도 있습니다. 정의되지 않은 NaN 및 Infinity라는 특수 값을 기억하시나요? 이들은 모두 Global 개체의 속성입니다. 또한 모든 로컬 객체의 생성자는 Global 객체의 속성이기도 합니다. 다음 표에서는 전역 개체의 모든 속성을 자세히 설명합니다.

속성

属    性

说    明

undefined

Undefined类型的字面量

NaN

非数的专用数值

Infinity

无穷大值的专用数值

Object

Object的构造函数

Array

Array的构造函数

Function

Function的构造函数

Boolean

Boolean的构造函数

String

String的构造函数

Number

Number的构造函数

Date

Date的构造函数

RegExp

RegExp的构造函数

Error

Error的构造函数

EvalError

EvalError的构造函数

RangeError

RangeError的构造函数

ReferenceError

ReferenceError的构造函数

SyntaxError

SyntaxError的构造函数

TypeError

TypeError的构造函数

URIError

URIError的构造函

밍이라고 말해 보세요

정의되지 않음 정의되지 않은 유형의 리터럴 NaN 숫자가 아닌 특수한 숫자값 인피니티 무한대를 위한 특수 수치 객체 객체 생성자 배열 배열 생성자 기능 함수 생성자 부울 부울 생성자 문자열 문자열 생성자 숫자 숫자 생성자 날짜 날짜 생성자 RegExp RegExp 생성자 오류 오류 생성자 평가 오류 EvalError 생성자 범위 오류 RangeError 생성자 참조 오류 ReferenceError 생성자 구문 오류 SyntaxError 생성자 유형 오류 TypeError 생성자 URI오류 URIError 생성자
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.