昨日の「Authorited JavaScript Guide」の調査ノート10:ECMAScript 5強化されたオブジェクトモデルでは、コードをデバッグするときに奇妙な現象が発生しました。次に、以下にソースコードを投稿します。
コードコピーは次のとおりです。
<script type = "text/javascript">
function person(){}
var per =新しい人;
object.defineProperties(per、
{
"ニックネーム":
{
価値:「トム」、
手紙:本当
}、
"年":
{
値:20、
設定可能:false、
書き込み:偽
}
});
var o = object.getownPropertyDescriptor(Per、 "nickname");
アラート(json.stringify(o));
</script>
Googleでの実行結果:
http://img.blog.csdn.net/20140529073008296?watermark/2/text/ahr0cdovl2jsb2cuy3nkbi5uzxqv dtaxmta0mzg0mw ==/font/5a6l5l2t/fontsize/400/fill/i0jbqkfcma ==/溶解/70/重力/中心
この結果は正しいですが、別の場所に変更すると、結果は異なります
コードコピーは次のとおりです。
<script type = "text/javascript">
function person(){}
var per =新しい人;
object.defineProperties(per、
{
"ニックネーム":
{
価値:「トム」、
手紙:本当
}、
"年":
{
値:20、
設定可能:false、
書き込み:偽
}
});
var name = object.getownPropertyDescriptor(Per、 "nickname");
Alert(json.Stringify(name));
</script>
実行結果:
なぜこれがなぜですか?単純な変数名を変更しました
問題は名前にありますが、私はそれを理解していません。オンラインで情報を検索しましたが、結果はありませんでした。その後、私は上級兄弟に尋ねに行き、フォーラムに問題を掲載しました:http://bbs.csdn.net/topics/390799744?page=1#post-397474060、
名前はウィンドウプロパティで、ウィンドウの名前を設定または返すために使用され、データ型は文字列です。最初の文はfunction person(){}であるため、終了したため、次のコードはグローバルなコンテキストにある可能性があります。つまり、Alert(json.stringify(name));上記のVAR名出力ですが、実際には、Window.Name出力である可能性があります。出力[オブジェクトオブジェクト]については、このタイプは名前の値のタイプです。