ホームページ >ウェブフロントエンド >jsチュートリアル >Javascriptグローバルオブジェクト_基礎知識

Javascriptグローバルオブジェクト_基礎知識

WBOY
WBOYオリジナル
2016-05-16 18:48:191130ブラウズ

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 インタープリタ全体と似ており、実行される ECMAScript (または JavaScript) 文字列である 1 つのパラメータを受け入れます。例:

このコード行は、次のコードと機能的に同等です:

インタプリタは eval() 呼び出しを見つけると、引数を実際の ECMAScript ステートメントとして解釈し、関数が存在する場所に挿入します。これは、 eval() 呼び出し内で参照される変数はパラメータの外で定義できることを意味します:

ここでは、変数 msg が eval() 呼び出しのコンテキストの外で定義されており、コードの 2 行目が実際のコード行に置き換えられるため、警告には依然として「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 EvalError のコンストラクター
範囲エラー RangeError のコンストラクター
参照エラー ReferenceError のコンストラクター
構文エラー SyntaxError のコンストラクター
タイプエラー TypeError のコンストラクター
URIエラー URIError のコンストラクター
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。