()とwindow.Audio
は異なるtoString
メソッドがあるため
、他のsまたはsメソッドは上書きされ、返される可能性があります。Object
Audio.toString === Object.toString //false
function
Object
toString
[object Function]
今、人々は走り回ったり、関数メソッドを上書きしたりしないのでtoString
、このアプローチで本当にうまくいくかもしれません。しかし、デバッグ上の理由などで、誰かがこれを行うことを決定する場合があります。
アップデート:
ささいなECMAScript5のソリューションも可能です(互換性)
(function () {
var keys = Object.keys(window),
r = {};
for (var i = 0, j; j = keys[i]; i++) {
r[j] = window[j];
}
console.dir(r);
})();
編集:
ありがたいことに、最後の回答が正しく機能しなかったことを指摘しました(私が何を考えていたのかさえわかりません)
とにかく、別のアプローチは
- 新しい空のIframeを作成します(about:blank)
- すべての
window
プロパティを取得最初から含まれているプロパティ
- 他のすべてをアレイにプッシュします
function getNonNatives(window) {
var iframe = document.createElement("iframe");
iframe.src = "about:blank";
document.body.appendChild(iframe);
var natives = iframe.contentWindow,nonnatives = {};
for(var prop in window)
if(!natives[prop] && window[prop] !== null)
nonnatives[prop] = window[prop];
document.body.removeChild(iframe);
return nonnatives;
};
console.log(getNonNatives(window));
toString
このように、誰かがObjects / Functionsメソッドをオーバーライドする場合でも、気にする必要はありません。
読みやすくするために、この編集には古いコードを含めません
コメント
コメントの質問に答えるに!!~
は:
は~
、オペランドのビットを反転するビット単位のNOT演算子です。
したがって、このロジックを指定すると、正の数以外に何も見つからない場合
に返されるためindexOf
、何かが見つかったかどうかを確認するための省略形として使用できます。
-1
~-1 == 0
と例えば~4 == -5
次に!!
、ブール値に変換するために使用されます
!!0 == false
と!!-5 == true
基本的にはその省略形です
if( myString.indexOf("myValue") > -1)