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

    私的良スレ書庫

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

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

    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
    1 : Name_Not - 2013/09/21(土) 23:00:45.82 ID:??? (+93,+30,+0)
    JavaScript を自ら学ぶ人のための質問スレッドです。
    >>2-4のテンプレを読んだ上で質問してください。

    ■質問を書く上で
    (1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
    (2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
      (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
    (3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。(なりすまし及び煽り防止のため)
    (4) 常に自発的に調べる心構えを持ってください。
      具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
      わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
    (5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
    (6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
      ※必ず「問題の事象が再現されること」を確認してください。
       必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
    (7) サンプルコードに HTML が含まれる場合はhttp://validator.w3.org/ で [Check] してみてください。
    (8) 質問を具体的かつ詳細に書くと回答を得られやすいです。質問テンプレートを活用してみてください。

    ■質問テンプレート
    【環境】OS, ブラウザをバージョンと共に記入してください。(ex: IE8, Firefox4)
    【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
    【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。(Windows なら「コピット」を活用)
    【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
    【サンプルコード】現象を再現可能な最小限のコードを書いてください。
     1レスに収まらないならコード投稿サイトを利用してください。
     http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/
    3 : Name_Not - 2013/09/21(土) 23:02:30.44 ID:??? (+3,-30,+0)
    ■主要FAQ (全部はhttp://fiddle.jshell.net/vSqKr/33/show/ )
    Q1. 別窓・フレーム内容やローカルファイルを読み書きしたいのですが…
    A1. 別サーバのページやファイルの内容はセキュリティ制約でアクセス不可です。
    Q2. document.write()でページ内容を追加したいのですが…
    A2. 一度表示完了後にwriteするとページ内容が消去されます。DOM等別手段を。
    Q3. table内容のinnerHTMLやDOMでの変更がうまく行かないのですが…
    A3. IEではtable/tbody/trのinnerHTML書き換え不可です。DOMを使いますが、
      DOMの場合tableの直下にはtbody要素が(作らなくても)あることに注意。
    Q4. フォーム部品名を変数にした「...myform.変数名.value」が動きません…
    A4. 「document.forms.myform.elements[変数名].value」でどぞ。
      JavaScriptでは一般に「obj.x」と「obj['x']」は同じ意味です。
      グローバル変数はwindowのプロパティなので「x」と「window['x']」も。
    Q5. CSSで設定した背景色がe.style.backgroundColorで取得できないのですが…
    A5. 取得には document.defaultView.getComputedStyle() を使う必要あり。
      IEでは要素オブジェクトのプロパティcurrentStyleを使う。
    Q6. setAttribute("class","foo")、setAttribute("onclick","bar()")が動きません…
    A6. IEではそれは不可。「obj.className="foo"」「obj.onclick=bar」でどぞ。
    Q7. タイマーやイベントハンドラに設定するコードにthisを含めたいのですが
      「"...this..."」とか「function(){...this...}」ではうまく行きません。
    A7. 実行時にthisが別のものを指してしまってる。以下のようにthisを束縛保存。
      「function(x){return function(){...x...};}(this)」
    Q8. input type="file"の値を設定(参照)できないのですが…
    A8. セキュリティ制約のため設定は絶対に不可。参照はブラウザにより不可。
    Q9. getElementById('ID名')や$('ID名')で要素が取れないのですが…
    A9. コード実行時点でHTMLがそこまで読まれてない。window.onload 中でやるとか
    4 : Name_Not - 2013/09/21(土) 23:03:27.68 ID:??? (+19,-30,+0)
    ■主要FAQ (全部はhttp://fiddle.jshell.net/vSqKr/33/show/ )
    Q1. 別窓・フレーム内容やローカルファイルを読み書きしたいのですが…
    A1. 別サーバのページやファイルの内容はセキュリティ制約でアクセス不可です。
    Q2. document.write()でページ内容を追加したいのですが…
    A2. 一度表示完了後にwriteするとページ内容が消去されます。DOM等別手段を。
    Q3. table内容のinnerHTMLやDOMでの変更がうまく行かないのですが…
    A3. IEではtable/tbody/trのinnerHTML書き換え不可です。DOMを使いますが、
      DOMの場合tableの直下にはtbody要素が(作らなくても)あることに注意。
    Q4. フォーム部品名を変数にした「...myform.変数名.value」が動きません…
    A4. 「document.forms.myform.elements[変数名].value」でどぞ。
      JavaScriptでは一般に「obj.x」と「obj['x']」は同じ意味です。
      グローバル変数はwindowのプロパティなので「x」と「window['x']」も。
    Q5. CSSで設定した背景色がe.style.backgroundColorで取得できないのですが…
    A5. 取得には document.defaultView.getComputedStyle() を使う必要あり。
      IEでは要素オブジェクトのプロパティcurrentStyleを使う。
    Q6. setAttribute("class","foo")、setAttribute("onclick","bar()")が動きません…
    A6. IEではそれは不可。「obj.className="foo"」「obj.onclick=bar」でどぞ。
    Q7. タイマーやイベントハンドラに設定するコードにthisを含めたいのですが
      「"...this..."」とか「function(){...this...}」ではうまく行きません。
    A7. 実行時にthisが別のものを指してしまってる。以下のようにthisを束縛保存。
      「function(x){return function(){...x...};}(this)」
    Q8. input type="file"の値を設定(参照)できないのですが…
    A8. セキュリティ制約のため設定は絶対に不可。参照はブラウザにより不可。
    Q9. getElementById('ID名')や$('ID名')で要素が取れないのですが…
    A9. コード実行時点でHTMLがそこまで読まれてない。window.onload 中でやるとか
    5 : Name_Not - 2013/09/21(土) 23:25:21.28 ID:31XAV7Zv (-13,+1,+0)
    >>1 乙!!
    6 : Name_Not - 2013/09/22(日) 00:09:28.73 ID:??? (+9,-30,-187)
    前スレからです。
    よろしくおねがいします。

    書き込み不可なはずのプロパティに、
    何度か書き込みをかけたり、その作業をする関数を何度か呼ぶと、
    Chromeでは書き込みができてしまい、困惑しています。
    これはブラウザのバグなのでしょうか?

    Object.defineProperty(Object.prototype,'0',{set:function (v){this.first_value=v}});

    function test1(){
    var a=[];
    a[0]=123;
    return a[0];
    }

    function test2(){
    var a=[];
    for(var i=0;i<100;i++)a[0]=123;
    return a[0];
    }

    test1() //undefined
    test1() //123
    test1() //123

    test2() //123
    7 : Name_Not - 2013/09/22(日) 00:34:50.21 ID:??? (-1,-29,-23)
    nullがオブジェクトでtrueやfalseが違うのは何故ですか?
    8 : Name_Not - 2013/09/22(日) 00:39:23.51 ID:??? (+38,-29,-127)
    >>6
    http://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
    Array オブジェクトの length プロパティの再定義
    >Chrome のバージョンでは一部の状況において、配列の現在の length プロパティと異なる値の length を無視し、
    >また書き込み許可の変更は一部の状況において暗黙的に動作しないようです。
    9 : Name_Not - 2013/09/22(日) 00:46:10.92 ID:??? (+63,+29,+0)
    >>8
    貴重な情報、大変大変ありがとうございます。
    10 : Name_Not - 2013/09/22(日) 01:25:24.64 ID:??? (+23,-29,-87)
    php+Jascrip+jQuerytでAjaxの勉強してるが、なんか、かなり難しいな
    全然簡単じゃないやん。
    仕事ではJavaで使ってるが、いつかphp+Jascrip+jQuerytでAjaxの勉強
    してたことが生かされるときってきますかね?
    11 : Name_Not - 2013/09/22(日) 01:34:39.07 ID:??? (+57,+29,-18)
    ジャスクリップ?
    ジェイクエリート?
    12 : 10 - 2013/09/22(日) 01:42:39.67 ID:??? (-1,-29,-15)
    ミスった
    ☓Jascrip
    ○Javascript
    13 : Name_Not - 2013/09/22(日) 01:56:07.92 ID:??? (+87,+27,-1)
    検索力と根気が役に立つ
    14 : 10 - 2013/09/22(日) 02:20:12.19 ID:??? (+74,+29,-67)
    >>13
    なるほどな。
    不具合情報とか、Javascript、phpのプログラムの本の間違えとか
    ブログで指摘しまくってたら、1日20~30人くらい人が来るようになった。
    特定の不具合情報検索したらオレのブログがグーグルで1番目にくるのは
    ちょっと達成感ある。
    15 : Name_Not - 2013/09/22(日) 05:44:56.01 ID:??? (+19,+1,+0)
    ショボww
    16 : Name_Not - 2013/09/22(日) 09:38:21.44 ID:??? (-3,-26,-21)
    alertの件は結果でたの?
    17 : Name_Not - 2013/09/22(日) 10:17:55.98 ID:??? (-1,-29,-14)
    16進数の桁揃えを一番シンプルにする方法は何ですか?
    ff→00ff(4桁)
    など
    18 : Name_Not - 2013/09/22(日) 11:12:37.24 ID:??? (-2,-30,-14)
    ('000'+(s.toString(16)).slice(-4)
    以上にシンプルな方法ありますか?
    19 : Name_Not - 2013/09/22(日) 11:56:30.09 ID:??? (-2,-30,-27)
    (num+0x10000).toString(16).slice(-4)
    とか。
    20 : Name_Not - 2013/09/22(日) 12:17:01.18 ID:??? (+38,-30,-34)
    0x0aを
    var a = 0x0a;
    これを文字列"0x0a"にする方法を教えて
    String(a)だと"10"に変換されるからダメ
    21 : Name_Not - 2013/09/22(日) 12:22:57.24 ID:??? (+61,+29,-3)
    >>20
    すぐ上のレスでもダメなのか
    22 : Name_Not - 2013/09/22(日) 12:27:59.90 ID:??? (+65,+29,-19)
    どちらがシンプルかは判断が難しかったので速度比較したら、
    IEやfirefoxでは桁あふれの方が速かったので、そうします
    http://jsperf.com/ketaawase
    ありがとうございました
    23 : Name_Not - 2013/09/22(日) 12:38:00.31 ID:??? (+1,-26,-8)
    10進数ならIntlAPIが便利だから覚えておくといいよ。
    24 : Name_Not - 2013/09/22(日) 13:39:48.67 ID:??? (+21,-30,-176)
    与えられた文字を使って、指定した長さの文字列(文字の重複もOK)の全組み合わせ

    var a = ["a","b", "c", "d", "e"];
    for(var i=0; i<a.length; i++) {
    for(var k=0; k<a.length; k++) {
    for(var j=0; j<a.length; j++) {
    console.log(a[i] + a[k] + a[j]);
    }
    }
    }

    これは5つの文字を使って、長さが3の文字列の組み合わせを出力している
    でも、長さを5にしたり10にしたり変更する場合いちいちforを追加してやらなければならない
    どうやって改善すればいいか教えて
    25 : Name_Not - 2013/09/22(日) 14:03:52.46 ID:??? (+49,-14,-7)
    >>24
    この例なら、5進数3桁と考えてみるとか。
    26 : Name_Not - 2013/09/22(日) 14:06:50.84 ID:??? (-2,-30,-40)
    5進数3桁だから、繰り返し回数は5^3。
    カウンタを回しながら、('00'+count.toString(5)).slice(-3)して、
    各々の桁に対応する文字を取り出す。
    27 : Name_Not - 2013/09/22(日) 14:08:31.76 ID:??? (+75,+26,-1)
    文盲ばっかり
    28 : Name_Not - 2013/09/22(日) 14:18:02.96 ID:??? (+7,-30,-69)
    参照を保持したまま配列の要素を全て削除するにはどうしたらいいですか?
    var a = [1,2,3,4];
    var b = a;
    var a = [];
    console.dir(b);
    こうすると、aがbとは別配列になってしまいます
    delete(a[0]);
    とすれば、参照を保持したまま要素の内容は削除できますが、
    要素数が減りません
    29 : Name_Not - 2013/09/22(日) 14:18:12.95 ID:??? (+62,+29,-2)
    >>27
    お前が盲目じゃね?
    30 : Name_Not - 2013/09/22(日) 14:19:55.51 ID:??? (-2,-30,-14)
    while (a.pop());
    で出来ました
    失礼しました
    31 : Name_Not - 2013/09/22(日) 14:20:16.25 ID:??? (+63,-30,-19)
    >>28
    別配列じゃダメなん?って思ってしまうが、

    var a = [1,2,3,4];
    a.length = 0;
    32 : Name_Not - 2013/09/22(日) 14:20:49.20 ID:??? (-1,-29,-14)
    a.splice(0,a.length);
    の方がいいですね
    33 : Name_Not - 2013/09/22(日) 14:21:12.61 ID:??? (+89,+28,-13)
    >>31の勝利だろw
    34 : Name_Not - 2013/09/22(日) 14:22:03.42 ID:??? (+66,+29,-1)
    >>31
    そんな方法もあったのですね
    ありがとうございました
    35 : Name_Not - 2013/09/22(日) 14:23:54.80 ID:??? (+60,-30,-71)
    >>24

    a = ['a', 'b', 'c', 'd', 'e']

    let dup=(a,i,s='',b=[])=>i?a.forEach(v=>dup(a,i-1,s+v,b))||b:b.push(s)

    s = dup(a,2) //["aa","ab","ac","ad","ae","ba","bb",......
    36 : Name_Not - 2013/09/22(日) 14:24:33.10 ID:??? (+69,+29,-3)
    >>33
    勝利とか、そういう低レベルな話ではないのです
    37 : Name_Not - 2013/09/22(日) 14:25:24.17 ID:??? (-2,-30,-24)
    dup(a,2).forEach(s=>console.log(s))
    38 : Name_Not - 2013/09/22(日) 14:25:54.13 ID:??? (+44,+17,+0)
    >>35
    すげえ
    39 : Name_Not - 2013/09/22(日) 14:27:43.79 ID:??? (+98,+29,-6)
    >>25-26
    それだと文字の種類が増えたときと長さの変更に耐えられないし的外れ
    40 : Name_Not - 2013/09/22(日) 14:31:40.67 ID:??? (+71,+29,-7)
    >>39
    桁数や文字種が数字になってるんだから、そこはなんとかできるでしょ。
    41 : Name_Not - 2013/09/22(日) 14:36:45.09 ID:??? (+7,-30,-71)
    >>35
    ES3版

    var dup=function(a,i,s,b){
    if(!s)s=''
    if(!b)b=[]
    if(i){
    for(var j=0;j<a.length;j++){
    dup(a,i-1,s+a[j],b)
    }
    return b
    }
    b.push(s)
    }
    42 : Name_Not - 2013/09/22(日) 14:50:11.59 ID:??? (+132,+29,-87)
    オブジェクトを加工する時は、なるべく参照を保持したまま加工した方が
    ガベージコレクションは減りますよね?
    別オブジェクトを作成するタイプの関数を破壊的な関数に置き換えたらパフォーマンスが上がる
    これは正しいですか?
    43 : Name_Not - 2013/09/22(日) 14:53:40.94 ID:??? (+9,-30,-67)
    可読性をあげた版

    function dup(ary, i, str, ret) {
     if ( !str ) str = '';
     if ( !ret ) ret = [];

     if (i) {
      for (var j = 0; j < ary.length; j++) {
       var char = ary[j];
       dup(ary, i-1, str+char, ret);
      }
      return ret;
     }
     ret.push(str);
    }
    44 : Name_Not - 2013/09/22(日) 14:54:05.48 ID:??? (+57,+29,-7)
    具体的にコード貼れ
    書いてることが根本的に矛盾してるから意図が分からん
    45 : Name_Not - 2013/09/22(日) 14:54:42.62 ID:??? (+68,+27,-15)
    >>42
    ベンチマークが全て
    まずやってから書き込んでくれ。
    46 : Name_Not - 2013/09/22(日) 14:59:55.09 ID:??? (+62,+29,-33)
    「なるべく参照を保持したまま加工」ってどういうこと?
    参照を保持しないと加工なんて出来ないじゃん
    クロージャでの変数キャッシュとパフォーマンスの関係を聞いてる?
    でも何でGCが出てくるのかがわからん
    47 : Name_Not - 2013/09/22(日) 15:10:34.95 ID:??? (+4,-30,-98)
    >>43を改良してみた

    function dup(ary, i) {
     var ret = [];

     function dup_deep(i, str) {
      if (i) {
       for (var j = 0; j < ary.length; j++) {
        dup_deep(i-1, str+ary[j]);
       }
      }
      ret.push(str);
     }
     dup_deep(i, '');
     return ret;
    }

    var a = ['a', 'b', 'c', 'd', 'e'];
    console.log(dup(a, 2));
    48 : Name_Not - 2013/09/22(日) 15:14:08.28 ID:??? (+4,-28,-66)
    http://jsperf.com/yousosuushitei

    arrayに最初から要素を与えるか与えないかのベンチマークを取りました
    指定した場合、firefoxとchromeで、かなりパフォーマンスアップしました
    しかしIEでは遅くなりました
    IEで遅くならないようにする方法ありますか?
    49 : Name_Not - 2013/09/22(日) 15:20:01.25 ID:??? (+26,-26,-162)
    それはIEが仕様的に悪いとは言わないが、最適化が弱い部分

    但しV8は64Kを超えるノードは後から追加してくれと1年前の公演で言っていた
    今は分からないが、まあ本当に色んな条件が絡んでくるだろうね

    まあ、2つ言えるとしたら、new Array(lowLength)はここ数年は優位
    確実性を求めるのなら、数値配列であればTypedArrayを使う
    50 : Name_Not - 2013/09/22(日) 16:01:44.16 ID:??? (+68,-30,-198)
    <script src="lodash.js"></script>
    <script>
    function dup(list, len) {
      return (function deep(i, str) {
        return i
          ? _(list).reduce(function (sum, ch) {
             return sum.concat(deep(i-1, str+ch))
           }, [])
          : str
      })(len, '')
    }

    var a = ['a', 'b', 'c', 'd', 'e'];
    console.log(dup(a, 2));
    </script>


    lodashを使って、ES3でも動くようにして
    読みやすさを保ったまま、ぎりぎりまでコードを絞った。
    pushはなんかださいのでやめた。

    まあ、好きな方を選んでくれ。

    let dup=(a,i,s='',b=[])=>i?a.forEach(v=>dup(a,i-1,s+v,b))||b:b.push(s)
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

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


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