では動作しません:変数「name」を使用すると、動作が(グローバル・スクリプトとして実行)この小さなスニペットで見ることができますJSオブジェクト
var name = {};
name.FirstName = 'Tom';
alert(name.FirstName);
警告利回りChromeのundefined
が、作品IEとFirefoxで。また、私は
alert(name);
では動作しません:変数「name」を使用すると、動作が(グローバル・スクリプトとして実行)この小さなスニペットで見ることができますJSオブジェクト
var name = {};
name.FirstName = 'Tom';
alert(name.FirstName);
警告利回りChromeのundefined
が、作品IEとFirefoxで。また、私は
alert(name);
window.nameを行う際に特別な目的を持っており、文字列のことになっている奇妙な値を取得します。 Chromeは文字列に明示的にキャストしているようです。したがって、は実際にはグローバル変数name
(つまりwindow.name
)の値に"[object Object]"
という値を与えてしまいます。それはプリミティブなので、プロパティ(name.FirstName
)は「スティック」しません。
この問題を回避するには、name
をグローバル変数として使用しないでください。
良いキャッチ...私は変数名にまったく注意を払っていませんでした。 –
@FelixKling私はほとんどの予約語のように 'name'を扱います。なぜなら、いくつかのホストは' 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
の代わりに{}
を使用する必要があります。より簡潔であるだけでなく、より効率的でより明示的です。
またはちょうど '削除名前;' – Oriol
name
変数は、var
で宣言された最上位変数がグローバルオブジェクトに関連付けられているため、実際にはwindow.name
です。
HTML5仕様requires that window.name
is a DOMString
です。つまり、window.name
の値はonly be a sequence of charactersであり、オブジェクトではありません。
Chromeでは、window.name
を使用してプリミティブ文字列以外のものを保存しようとすると、その値がプリミティブ文字列に変換されます。たとえば:
window.name = {};
window.name === "[object Object]"; // true
あなたはトップレベルの範囲内にないname
変数を使用することで、この問題を回避することができます
(function() {
var name = {};
// this `name` is not `window.name`
// because we're not in the top-level scope
console.log(name);
})();
'language'属性は廃止され、唯一の' type'が属性を使用します。 'alert'の代わりに' console.log'を使い、Chrome Devを使うのも良いでしょう。それらを読むためのツール(またはFireBug)。そして最終的にコードの1行目にdoctypeを持つ必要があります。doctypeは '<!doctype html>' –
です。AFAIK 'var name = {}'構文を使うのが一般的です。 – Hamish
それはちょうどタイプミスでした...私はオブジェクトではない 'オブジェクト'を入力しました。それでもクロムにはエラーが発生します。 chromeで新しいコードを試してみてください。 –