のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,908人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    元スレ+ JavaScript の質問用スレッド vol.122 +

    JavaScript覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

    501 = :

    キチンと理由があります、調べましょう。

    502 = :

    ブラウザで対応してないapiを使う時どっちの書き方がいいですか
    if ("a" in window) {alert("未対応");}

    if (!"a" in window) {alert("未対応"):}

    もしくはこれこれ以外で良い方法を教えてください

    503 = :

    >>500
    うん。かわった。
    今は </body>の直前に入れるのが多い。

    504 = :

    実行タイミングの問題だよなw

    506 = :

    >>502
    状況に応じて typeof 演算子と Object.prototype.hasOwnProperty を使い分けてください。

    > if (!"a" in window) {alert("未対応"):}
    これは false in window と同義であり、期待通りに動作しません。

    507 = :

    追記。
    それがオブジェクトであるならば、Object.prototype.toString.call で [[Class]] 判定する事も検討して下さい。
    それが配列であるならば、Array.isArray を使用して下さい。
    それが関数であるならば、それ自身を call する事によって関数以外で TypeError の例外を返すことを検討して下さい。

    508 = :

    >>500
    script要素の読み込み中はDOM構築が停止する為、DOM構築速度を上げる為にscript要素をbody直前に持って行く事があります。
    勿論、head要素までの読み込みで実行可能なタイミングであればhead要素内で完結すべきですが。
    http://gihyo.jp/dev/serial/01/crossbrowser-javascript/0006

    例外として script[defer], script[async] を使用すれば、head要素内にscript要素を置いてもDOM構築を妨げません。
    これらは対応ブラウザの制限がある為、対象ブラウザを踏まえて使用を検討する必要があります。
    http://gihyo.jp/dev/serial/01/crossbrowser-javascript/0008
    http://caniuse.com/#feat=script-defer
    http://caniuse.com/#feat=script-async

    509 = :

    ありがとうございました
    headに書いたものはbodyより前に読み込まれるので
    bodyを表示してから実行したいものはbodyの後ろに書け、ということのようですね
    するとheadに書けでもbodyに書けでもなく、必要に応じて分けて書けが正解でしょうか?

    510 = :

    >>508
    見逃していました
    詳しくありがとうございます

    512 = :

    タグの話のどこがJavaScript?
    関係ない話をするなら別スレに行けよ

    513 = :

    ネタで言ってるんだよな?

    514 = :

    >>513
    ECMAScriptの仕様書のどこに
    タグのことが書いてある?

    このスレで質問していいのは
    ECMAScriptの仕様書の範囲内だけだ

    515 = :

    ネタで言ってるんだよな?

    516 = :

    勝手に決めるな

    518 = :

    >>514
    さすがにうざすぎる
    お前が失せろ

    519 = :

    Web制作板で何を言ってるんだって感じだな。

    521 = :

    ES6 の Map って便利だね
    Iterator の仕様が難読だけど、どこかに日本語資料ってないのかな

    522 = :

    >>521
    自分で実装すればいいだけなんだから
    そんなのいらんだろ。

    525 = :

    >>522
    実装するためにはES6の仕様書を読む必要がある
    今、読んでいるけど英語が不得手で解読に時間がかかってる

    531 = :

    >>530
    いやぁ別サイトをhttpRequestで取ってきてDOMでイジってiframeに書くようなことを考えてて
    文字列やなんやらにまた書き出すなんて二度手間だなぁと思ってたんだが
    readonlyならどうしようもないな、トンクス

    534 = :

    IE7 で getter-property を定義する方法はないものでしょうか

    var obj = {};
    Object.defineProperty(obj, 'length', {get: function () { return Object.keys(this).length; });

    535 = :

    >>534
    残念ながらIE7でgetterは実現できません

    536 = :

    >>535
    ありがとうございます
    後出しで申し訳ないのですが、その後、IE8 の Object.defineProperty も DOM にしか適用できない制限付きであることを知りました
    IE8 で>>534を実現する方法もやはり、ないものでしょうか…

    537 = :

    javascriptってflashみたいに
    「今見てるか、そのウィンドウが有効化されてるかどうか」
    っての判別できますか?
    最小化されてたりタブにあるだけだったら停止みたいなの造りたいんですが

    538 = :

    >>537
    これでどうじゃろ http://hakuhin.jp/js/page_visibility.html

    539 = :

    >>537
    addEventListener('blur', listener, false);

    542 = :

    >>541
    確かにどっちも循環参照するコードだねw
    しかも最近のブラウザでは問題にならないというのに、記事作成が2013年…
    その記事書いたやつはnoob認定でいいよ

    543 = :

    >>541
    循環参照なんかどうでもいいよ
    elemが消滅してもremoveEventListener叩いても結局全部開放されるんだから

    544 = :

    >>541
    > グローバルスコープにすることで、スコープチェーンによる参照が無くなるため、循環参照は発生しなくなります。
    循環参照してる上に説明文も誤りですね
    グローバルスコープにする必要があるのは elem ですし、グローバルスコープにしても循環参照はします
    グローバルスコープにする理由は、DOMオブジェクトをグローバル変数にしておけば循環参照してもGCが期待通りにメモリを解放してくれるからです

    var elem = document.getElementById('Sample');
    elem.addEventListener('click', function (event) {
    console.log(elem);
    }, false);

    また、この場合は event.currentTarget で対象の要素ノードを取得出来るので変数束縛する必要もありません
    そもそも、このメモリリーグ問題は attachEvent を使う古い実装で発生したはずなので実証コードも良くないですね
    IE8- の attachEvent なら event.currentTarget は存在しないので elem の変数束縛も納得できます
    最も、event.target から該当ノードを検索すれば循環参照そのものを回避出来ますが
    循環参照させないコード例とか、detachEvent で unload 時に明示的に参照を切る方法とか、その記事で触れられていない対策があるのも気になります

    545 = :

    >>542, >>543, >>544
    ありがとうございます。 やはり循環してましたか。
    ところでみなさん、この辺の知識はどうやって仕入れてます?
    見るべきサイトや本があれば教えてください。

    546 = :

    >>538>>539
    あざっす!
    まさにこれです!

    547 = :

    >>545
    循環参照とメモリリークパターンは下記を参考に
    http://msdn.microsoft.com/ja-jp/library/bb250448.aspx
    http://d.hatena.ne.jp/babu_babu_baboo/touch/20100417/1271465430

    「この辺の知識」とは具体的には?
    基本的に情報は公式サイト以外は信用しない
    リークパターンでいうならMSDNを検索して検索して検索する
    一次情報に勝る信頼性はないからそうしてる
    リークパターンは情報が少なくて信用出来る意見を個人サイトから取り入れたのもあるけど、それでも公式サイトとの正誤比較は必須と思ってる

    548 = :

    jQueryを使うと循環参照していても
    メモリリークしないのはどういう理屈でしょうか?

    549 = :

    >>548
    >>5

    550 = :

    >>548

    1. JavaScriptだけの世界においては循環参照していてもメモリリークは起きない
    2. DOMはブラウザが持っているAPIで、JavaScriptで実装されたAPIではない。(今は多少状況が違っていたりする)
    3. JavaScriptとDOM(JavaScriptの外)で循環参照しているのがメモリリークになる
    4. 循環参照が起きやすいのが、DOMのイベントハンドラ
    5. jQueryではDOMに直接イベントハンドラを設定せずに内部で独自に管理している
    6. その為、イベントハンドラのJavaScriptとDOMが直接循環参照しない


    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について