この動作は、次の小さなスニペットで確認できます (グローバル スクリプトとして実行します)。
var name = {};
name.FirstName = 'Tom';
alert(name.FirstName);
アラートundefined
は Chrome で生成されますが、IE と Firefox で機能します。私も奇妙な値を取得します
alert(name);
この動作は、次の小さなスニペットで確認できます (グローバル スクリプトとして実行します)。
var name = {};
name.FirstName = 'Tom';
alert(name.FirstName);
アラートundefined
は Chrome で生成されますが、IE と Firefox で機能します。私も奇妙な値を取得します
alert(name);
window.nameには特別な目的があり、文字列である必要があります。Chrome は明示的に文字列にキャストしているように見えるため、実際にはグローバル変数(つまり) に の値をvar name = {};
与えることになります。これはプリミティブであるため、プロパティ ( ) は「固執」しません。name
window.name
"[object Object]"
name.FirstName
この問題を回避するにはname
、グローバル変数として使用しないでください。
window.name
ウィンドウの名前を設定するために使用されます。ウィンドウ名は文字列しかできないため、設定したものwindow.name
はすべて文字列に変換されます。また、文字列はプリミティブ値であるため、プロパティを持つことはできません。解決策は、別の変数名または別のスコープを使用することです。
window.name
または、このコードを最初に持っていれば、好きなように使用できます。これはまったくお勧めしませんが、概念実証として:
(function () {
var _name;
window.__defineGetter__('name', function () {
return _name;
});
window.__defineSetter__('name', function (v) {
_name = v;
});
})();
さらに、{}
代わりに を使用する必要がありnew Object
ます。より簡潔であるだけでなく、より効率的でより明確です。