元スレ+ JavaScript の質問用スレッド vol.122 +
JavaScript覧 / PC版 /みんなの評価 :
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 = :
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 = :
550 = :
>>548
1. JavaScriptだけの世界においては循環参照していてもメモリリークは起きない
2. DOMはブラウザが持っているAPIで、JavaScriptで実装されたAPIではない。(今は多少状況が違っていたりする)
3. JavaScriptとDOM(JavaScriptの外)で循環参照しているのがメモリリークになる
4. 循環参照が起きやすいのが、DOMのイベントハンドラ
5. jQueryではDOMに直接イベントハンドラを設定せずに内部で独自に管理している
6. その為、イベントハンドラのJavaScriptとDOMが直接循環参照しない
類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.122 + (116) - [100%] - 2018/5/2 18:30
- + JavaScript の質問用スレッド vol.125 + (1001) - [97%] - 2015/10/7 17:45
- + JavaScript の質問用スレッド vol.123 + (966) - [97%] - 2020/10/20 2:30
- + JavaScript の質問用スレッド vol.120 + (1002) - [97%] - 2014/11/8 1:15
- + JavaScript の質問用スレッド vol.124 + (1001) - [97%] - 2015/7/16 1:30
- + JavaScript の質問用スレッド vol.121 + (1001) - [97%] - 2022/11/29 16:30
- + JavaScript の質問用スレッド vol.132 + (1001) - [97%] - 2018/4/19 11:00
- + JavaScript の質問用スレッド vol.142 + (984) - [97%] - 2020/8/27 19:15
- + JavaScript の質問用スレッド vol.112 + (1001) - [97%] - 2013/11/27 16:46
- + JavaScript の質問用スレッド vol.121 + (1001) - [97%] - 2015/1/1 18:30
- + JavaScript の質問用スレッド vol.129 + (981) - [97%] - 2016/5/5 8:16
- + JavaScript の質問用スレッド vol.129 + (926) - [97%] - 2017/7/27 13:45
- + JavaScript の質問用スレッド vol.128 + (1001) - [97%] - 2016/2/26 6:45
- + JavaScript の質問用スレッド vol.123 + (1002) - [97%] - 2015/4/27 23:30
- + JavaScript の質問用スレッド vol.127 + (1001) - [97%] - 2016/2/4 0:15
- + JavaScript の質問用スレッド vol.127 + (160) - [97%] - 2021/7/16 9:30
- + JavaScript の質問用スレッド vol.142 + (926) - [97%] - 2019/12/23 13:15
トップメニューへ / →のくす牧場書庫について