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

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

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

    JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    751 : Name_Not - 2014/05/20(火) 03:15:21.94 ID:??? (+13,-9,+0)
    内部関数を使うのじゃ
    752 : Name_Not - 2014/05/20(火) 03:34:41.21 ID:??? (-2,-30,-26)
    var i=0;
    function fun(){
    if(i==0){
      i++;
      return fun();
     }else{
      return 999;
     }
    }
    753 : Name_Not - 2014/05/20(火) 03:38:38.88 ID:??? (+0,-30,-86)
    >>726
    Array#concat, Array#slice で index = 1 を除く配列を再構築し、Array#forEach で処理してはどうでしょう?

    >>745
    Array.prototype.forEach は 0 から昇順に処理していく仕様であり、処理順はランダムではありません。
    別の仕様と勘違いしておられるのでは?
    http://es5.github.io/#x15.4.4.18
    754 : Name_Not - 2014/05/20(火) 03:44:03.44 ID:??? (+4,-29,-104)
    >>746
    関数の内容に依存するとしかいえません。
    必須の引数を第一引数にはしますが、どちらが必須か判断できる情報が出てないので。
    蛇足ですが、Function#length があるのでオプション扱いの引数なら仮引数は指定しません。
    755 : Name_Not - 2014/05/20(火) 04:31:37.29 ID:??? (+5,-30,-42)
    >>746
    どっちとかはないからDOMの操作と合わせてみるとかはどうですか。
    var insertedElement = parentElement.insertBefore(newElement, referenceElement)
    756 : Name_Not - 2014/05/20(火) 05:38:26.95 ID:??? (+16,-30,-116)
    ネストされたオブジェクト
    hoge.moge.poge.page
    にアクセスしたいですが、hogeの内容は不定で、
    hoge.moge
    などが存在する時もしない時もあるとします。
    もし存在しない時に
    if (hoge.moge.poge.page)
    のような条件判定をすると、末端のpageの有無を調べる前にエラーになってしまいます
    こういった複数階層のオブジェクトの属性をエラーを出さずに調べることの出来る
    ライブラリみたいのありませんか?
    757 : Name_Not - 2014/05/20(火) 06:13:34.57 ID:??? (+4,-30,-219)
    >>756
    var hoge = {};
    if(hoge && hoge.moge && hoge.moge.poge && hoge.moge.poge.page) { console.log(hoge); }
    hoge.moge = {}
    if(hoge && hoge.moge && hoge.moge.poge && hoge.moge.poge.page) { console.log(hoge); }
    hoge.moge.poge = {};
    if(hoge && hoge.moge && hoge.moge.poge && hoge.moge.poge.page) { console.log(hoge); }
    hoge.moge.poge.page = {};
    if(hoge && hoge.moge && hoge.moge.poge && hoge.moge.poge.page) { console.log(hoge); }
    758 : Name_Not - 2014/05/20(火) 06:23:23.21 ID:??? (+57,+29,-12)
    ありがとうございます
    ですがこれは例で、階層を構成するキーの名前や深さは毎回色々変わります
    759 : Name_Not - 2014/05/20(火) 06:55:10.81 ID:??? (-10,-30,-219)
    >>756
    構文的には

    ((( hoge || {} ).moge || {} ).poge || {} ).page

    のようにするのが単純かな
    しかし例えば hoge.moge が undefined でもオブジェクトでもない場合はエラーになる

    より汎用的には

    function getNested(obj, names){
    // obj は根元のオブジェクト, names は名前の配列
    for(var i = 0; i < names.length; i++ ){
    if(obj instanceof Object){
    obj = obj[ names[i] ];
    } else if (obj === undefined){
    return undefined;
    } else {
    ??? // undefined でもオブジェクトでもない場合
    }
    }
    return obj;
    }

    getNested(hoge, ['moge', 'poge', ...]);
    760 : Name_Not - 2014/05/20(火) 07:10:55.68 ID:??? (+32,-29,-6)
    便乗で質問なのですがtry catchでスルーしちゃだめなのですか
    761 : Name_Not - 2014/05/20(火) 07:12:49.14 ID:??? (+67,+29,-7)
    >>759
    ありがとうございます
    自分もほぼ同じ処理を今書いたところでした・・
    762 : Name_Not - 2014/05/20(火) 07:16:19.59 ID:??? (+91,+29,-55)
    例外は基本的に異常を目立つ方法で知らせるものなので
    通常の範疇で発行するのは控えた方がいいと本に書いてありました
    763 : Name_Not - 2014/05/20(火) 07:32:17.56 ID:??? (+57,+29,-20)
    例外を投げるんじゃなくてエラーをそのままにしておくので少し違いましたね
    764 : Name_Not - 2014/05/20(火) 11:21:09.91 ID:??? (+6,-29,-60)
    >>761
    プロパティアクセス演算子を ToBoolean で判定するより、in 演算子で判定する方が好ましいと思います
    765 : Name_Not - 2014/05/20(火) 11:24:37.76 ID:??? (+62,+29,-18)
    >>760,762
    例外を放置することになるので、特殊なケースを除いて出来るだけ避けるべきです
    通常は例外が発生しないようにコードを組みます
    766 : Name_Not - 2014/05/20(火) 11:33:03.89 ID:??? (+76,+29,-20)
    >>762,763,765
    なるほど勉強になりました
    ようはデバッグのときに使えということなのでしょうかね
    767 : Name_Not - 2014/05/20(火) 11:54:56.67 ID:??? (+13,-29,-97)
    >>766
    デバッグで try-catch は使いませんよ。
    例外を回避したら、エラー不明でむしろデバッグできなくなります。
    デバッグするなら例外は発生させるべきです。

    そもそも、例外とは意図的に発生させるものです。
    TypeError なら特定の型以外の引数は受け付けないという事。
    ならば、関数呼び出しする前に typeof 演算子で型判定を入れれば例外を回避できます。
    多くの場合はこのように実行前に回避できますが、中には関数呼び出しするまで例外条件を判定できないケースがあり、その場合に try-catch を使用します。
    768 : Name_Not - 2014/05/20(火) 14:58:08.77 ID:??? (+9,-29,-76)
    広告を非表示にするアドオンに対抗するためのantiblockっていうのあるじゃないですか
    これは広告を非表示にするアドオンを入れると
    Please disable your なんちゃらってメッセージが出てページ内の表示をブロックされるんですが
    このantiblockが生成する要素をconsoleから消してるんですが、消したらすぐにまたブロックの要素が表示されます
    http://antiblock.org/?p=v3&demo
    これってどういう仕組みになっているのでしょうか?
    769 : Name_Not - 2014/05/20(火) 16:02:55.30 ID:??? (+4,-30,-116)
    >>768
    要素の削除を検知する mutation event を利用しているっぽい
    コードの中に
    addEventListener("DOMNodeRemoved", ... )
    がある
    そのハンドラで削除された要素を再生成しているのだろう
    770 : Name_Not - 2014/05/20(火) 16:07:47.08 ID:??? (+87,+29,-17)
    まじすか
    クソうぜえっすね
    どうにもならなそうですね
    今は降伏することにします
    771 : Name_Not - 2014/05/20(火) 16:17:54.83 ID:??? (+34,-26,-33)
    Chromeなら開発者ツールからコード直接編集できるだろ
    772 : Name_Not - 2014/05/20(火) 16:26:09.11 ID:??? (+13,-14,-16)
    エディターやらIDEやらってなに使ってます?
    773 : Name_Not - 2014/05/20(火) 16:47:55.76 ID:??? (+4,-13,+0)
    atom
    774 : Name_Not - 2014/05/20(火) 17:21:25.47 ID:??? (+95,+21,-3)
    >>770
    削除ではなく、非表示にしてみてはどうでしょう?
    775 : 747 - 2014/05/20(火) 17:22:52.51 ID:??? (+26,-3,-1)
    >>750-752
    ありがとうございます
    内部関数で解決しました
    776 : Name_Not - 2014/05/20(火) 17:55:21.12 ID:??? (+70,+29,-2)
    >>774
    その手がありますね!ありがとうごじあます
    777 : Name_Not - 2014/05/20(火) 17:55:48.16 ID:??? (+60,+28,-7)
    >>771
    ページを移動するたびに手動で編集するのは堪えますw
    778 : Name_Not - 2014/05/20(火) 20:13:54.14 ID:??? (+11,-29,-12)
    >>759

    > if(obj instanceof Object){

    これやって、一体何のメリットが有るんですか?


    (注意 俺は無駄だと思ってる)
    779 : Name_Not - 2014/05/20(火) 20:31:52.07 ID:??? (+8,-14,-13)
    最後のelseがあるからじゃない
    780 : Name_Not - 2014/05/20(火) 21:40:15.22 ID:??? (+52,-29,-3)
    var xx=function(){}
    ってする人はバカなんですか?
    みにくいんですけど
    781 : Name_Not - 2014/05/20(火) 21:57:08.13 ID:??? (+10,-19,-3)
    >>788
    あー、それは俺も思う。
    必要な場合はそれでいいけど、
    普通は、function xx() {} であるべきだよな。
    782 : Name_Not - 2014/05/20(火) 22:06:45.79 ID:??? (+3,-30,-38)
    どっちでもいいんでないの
    後から変更することもあるから最初から
    var xx=function(){}
    にしとけば手間を省けるとか
    エディタのシンタックス強調の設定を手抜きしたいとか

    >>778
    チェックしないと obj[name] がエラーになるやん
    783 : Name_Not - 2014/05/20(火) 22:14:40.76 ID:??? (+37,+6,-3)
    >>780
    変数が実体化されるタイミングが違う
    784 : Name_Not - 2014/05/20(火) 22:21:05.01 ID:??? (+7,+29,-2)
    タイミングとはもっと詳しくおしえてください
    785 : Name_Not - 2014/05/20(火) 22:26:49.29 ID:??? (+44,+26,+0)
    ぐぐれかす
    786 : Name_Not - 2014/05/20(火) 22:30:08.53 ID:??? (+52,+29,-7)
    タイミングが違うのは判った上でだろ
    787 : Name_Not - 2014/05/20(火) 22:37:37.84 ID:??? (+53,+29,-12)
    タイミングが違う事がわかってるなら「バカなんですか?」とバカな発言はしないだろ
    788 : Name_Not - 2014/05/20(火) 22:43:00.32 ID:??? (+16,-30,-60)
    >>784
    http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/10_Execution_Contexts.html#section-10.1.3
    安易に「バカなんですか?」なんて質問すると冷たい反応しか得られないから注意してね
    789 : Name_Not - 2014/05/20(火) 22:49:25.05 ID:??? (+61,-30,-37)
    普通に考えるとタイミングが違うだけなら、var xx=function(){} と書くメリットがまったく感じられないんですがw
    バカは言いすぎかもしれませんが、頭が悪いかなと思います
    790 : Name_Not - 2014/05/20(火) 22:58:58.40 ID:??? (+4,-30,-124)
    >>778
    objがプリミティブ値(Number | String | Boolean Null | Undefined)
    かどうかを判定してると読めばいいんじゃない?

    function getNested(obj, names){
    var v = obj[ names[0] ];

    /* nameの最後、またはプリミティブ値に達するまでobjを探る */
    for (var i = 1; i < names.length; i++) {
    if (! v instanceof Object) break;
    v = v[ names[i] ];
    }

    return v;
    }
    791 : Name_Not - 2014/05/20(火) 23:42:10.77 ID:??? (+90,+29,-4)
    >>789
    まあお前はその程度だよ
    792 : Name_Not - 2014/05/20(火) 23:58:49.28 ID:??? (+70,+29,-17)
    >>791
    その程度のレスしかできないあなたもその程度
    793 : Name_Not - 2014/05/21(水) 00:05:40.17 ID:??? (+57,+29,-25)
    変数に代入してるならそれを何度か使うんだろ
    一度しか使ってないなら、何度か使う可能性があるのかもしれない
    794 : Name_Not - 2014/05/21(水) 00:57:55.28 ID:??? (+67,+30,-79)
    >>789
    どちらにしても小馬鹿にした態度は変わらないのね…

    初めから結論が出ているなら質問しない方がいいと思うよ
    通常は結論を保留するからこそ質問するものだけど、あなたの質問は逆に見えるからね
    両者の違いを理解しない状態で一方を馬鹿と断ずるのは賢い選択とはいえないよね
    795 : 745 - 2014/05/21(水) 02:14:18.04 ID:??? (+0,-24,-18)
    >>745
    自己レス。漏れの勘違い

    forEachは、順番に処理するんだね
    for inが、順序不定だったか
    796 : Name_Not - 2014/05/21(水) 02:30:27.12 ID:??? (+31,-30,-27)
    結局
    var a = function(){}

    function a(){}
    のそれぞれの使い分けを詳しく説明できる人いないの?
    797 : Name_Not - 2014/05/21(水) 02:36:43.70 ID:??? (+57,+29,-3)
    むしろ何が分からないのかが分からない
    798 : Name_Not - 2014/05/21(水) 02:47:45.23 ID:??? (+91,+29,-7)
    既に説明されてるし、これ以上詳しく説明しようとも思わない
    799 : Name_Not - 2014/05/21(水) 02:56:49.43 ID:??? (+57,+29,-19)
    あらたに判明した問題に対して
    フラグを新設することで対応して
    後から何やってるか分かりにくくなる現象の名前は何ですか?
    800 : Name_Not - 2014/05/21(水) 02:58:50.37 ID:??? (+29,+11,+0)
    場当たり対応
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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