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

    私的良スレ書庫

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

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

    JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    101 : Name_Not - 2020/11/22(日) 20:41:54.86 ID:PtogewyP.net (+33,+30,-126)
    外様、と表現されているもので挙動が変わり得る、を以て「仕様上保証されているものではない。」と書いたのだが、理解頂けなかったようで。

    そんなもんはぶっちゃけ、どうでもいいんだけれど、V8でMapやSetが重い点に関して、何か情報頂けないか。
    Objectのプロパティアクセスがカリカリチューニングで早いのは当然、と言うかそうじゃないと使い物にならない、のは想像に易い。
    MapやSetの速度改善は、
    ・あり得るのか
    ・進む予定はあるのか
    ・進む可能性はあるのか

    例えば万単位でPush的な操作した際の処理時間がObjectよりかなり遅いと思っている。
    logとか手元に残してなくてごめん。
    102 : Name_Not - 2020/11/23(月) 20:54:12.11 ID:???.net (-9,-29,-108)
    仕様に大変詳しいここのお偉方様に質問です
    配列の要素やオブジェクトのプロパティに値を代入する変数に対して、
    constを使わずにletを使う例を見るのですが、これはconstの意味の取り間違えですか?
    それとも"内容を変更する可能性がある"という目印のため、あえてそうする風習があるのですか?
    103 : Name_Not - 2020/11/23(月) 23:52:42.52 ID:???.net (+35,+29,-72)
    >>101
    いやいや、流石にそれはない
    JSは拡張自由であり、基本的に実行環境で拡張して使うスクリプト言語なんだから外様のことまで考えてたらきりがない
    例えばオブジェクトをブーリアン型に変換したらtrueになるが、document.allなど外様を考えたらその限りではなくなるでしょ
    外様を考慮するのは流石にバカとしか言いようがないよ
    104 : Name_Not - 2020/11/24(火) 01:35:13.37 ID:???.net (+27,+29,-5)
    “外様”なんて書き方してる時点で理解してないの丸わかりだよね
    107 : Name_Not - 2020/11/24(火) 07:56:22.81 ID:???.net (+22,+29,-7)
    単に無頓着なだけなんじゃない?
    108 : Name_Not - 2020/11/24(火) 10:32:41.76 ID:???.net (-26,-29,-81)
    for...ofやfor...inについては、for文の印象を引き摺って、考え無しにletを使ってしまっているのではないか。varしか無かった時代の名残りとも言えるかも。

    let a = [];についてはもしかすると、aに対して要素の編集、変更をしたいんだよ、と明示したくてletにしているのかもしれない。編集したい内容次第では、代入した方が早いような配列操作は結構多い。その辺の修正を見越してletで定義しているのか?

    根本的には書いた人間に聞くのが良いのかと。
    109 : Name_Not - 2020/11/24(火) 16:02:54.40 ID:???.net (-26,-29,-39)
    for..of/for..inのパターンは考えなしにletでもいいんじゃないかという気がしないでもない
    このケースで誤って再代入して困るようなコードってどんなの?
    110 : 102 - 2020/11/24(火) 21:00:18.55 ID:???.net (-26,-29,-70)
    ふむふむ
    皆様ありがとうございました
    個人的にはconst厨なので気になるのですが(というかJSにconst厨なんてあり得ないと思ってる)
    varからの移行で、というのはあるかもしれません
    for-ofにconstが使えなかった時もありましたしね
    111 : 102 - 2020/11/24(火) 21:04:33.20 ID:???.net (+29,+29,-90)
    >>109
    そりゃあうっかり再代入したあとに再代入してないつもりで使ったときに困るんじゃないですか
    constの利点は意図しない再代入をエラーで気づかせてくれることですから
    それ以上でもそれ以下でもないと思います
    112 : Name_Not - 2020/11/24(火) 21:18:54.93 ID:???.net (+25,+29,-37)
    イミュータブル流行ってんのも巨大オブジェクトの差分検出に必要とかいうクソどうでもいい理由だしな。
    俺は全部letで書くぜ!
    114 : Name_Not - 2020/11/25(水) 06:58:23.34 ID:???.net (-21,-29,-145)
    letでも再定義はできないのだから
    値を設定するときにlet x=vの形で書く以上うっかり再代入なんてありえない
    例えば関数頭でこの変数の値は不定だと思って定義して
    その中のクロージャで、よし弄るぞってなることもありえない

    まずより広範囲で使われることになるオブジェクトをfreezeするとか
    プロパティごとに設定すべき(privateも含めて)という話なら分かるが
    constだけに拘っても得られるものは自己満足だけ
    115 : Name_Not - 2020/11/25(水) 09:00:07.89 ID:???.net (+30,+29,-144)
    あるとすれば、後続処理でブロックスコープなり、即時関数なり使っていて、その中でletで再代入を前提とした同名の変数を定義していて、何かしらの修正時に、この同名変数の定義部分が無くなったが、この同名変数への再代入処理が残っている、と言う場合くらい?
    そもそも別スコープとは言えど、同名で変数定義するのは避けよう、と言う程度な問題ではある。
    116 : Name_Not - 2020/11/25(水) 16:03:06.05 ID:???.net (-22,-29,-50)
    >>115
    なるほどねー

    自分の場合はループ内にそんな長々と処理かかないからその問題はまず発生しないな
    for-of/for-inでletにするかconstにするか一瞬考えたりconstからletに変更するほうが無駄に思えてきた
    117 : Name_Not - 2020/11/25(水) 18:43:32.92 ID:???.net (+30,+29,-36)
    >>114
    「うっかり」が「ありえない」と考えるか「ありえる」と考えるかの違い
    結局好きにすればいいと思うよ
    118 : Name_Not - 2020/11/25(水) 19:53:23.16 ID:???.net (+21,+28,+0)
    アリエールでしょ!
    119 : Name_Not - 2020/11/25(水) 21:07:53.57 ID:???.net (+37,+30,-225)
    >>117
    先の理由で広範囲だったり遠方で使う一部の定数になら使う意味があると思う
    ということはそういう定数をそういう定数ですよと効果的に示すために使ったほうが
    あるかないかもわからない「うっかり」のために全部constにするよりはメリットが大きいんじゃないかという話

    そうじゃない大部分の変数はスコープを短くするのが基本なんだから
    痴呆でも無い限りそんなうっかりが起こることはない
    それが起こる確率とconstとletで2文字多い分打ち間違えやらでトラブる確率どっちが高いのかって話だよ

    拘るのは結構だが、constだけに拘ってオブジェクトを放置したり
    型周りを放置するのは本当に理にかなっているのか?
    まあそこまでするなら結論altJSでやれと言いたいけどな
    120 : Name_Not - 2020/11/25(水) 21:28:17.45 ID:???.net (+27,+29,-5)
    だから好きにすれば?
    お前が絶対じゃないよ
    121 : Name_Not - 2020/11/25(水) 22:08:50.20 ID:???.net (+20,+27,-3)
    論破されたやつの末路w
    122 : Name_Not - 2020/11/25(水) 22:14:18.69 ID:???.net (+27,+29,-19)
    お前の意見には全然賛同できないし
    お前もこっちの意見には絶対に靡かないと分かってる
    123 : Name_Not - 2020/11/26(木) 20:22:58.80 ID:???.net (+33,+30,-110)
    個人的は、
    全てconstに出来ないのは能力不足だとは思う。
    全てconstにせよ、は合理的じゃないから採用はしない。

    だからどうした、俺の美学…と言う話だなぁ。

    ついでに言えば、varはもう、特殊過ぎて使いこなせる気がしないから使わない。昔使ってた自分を褒めてあげたい。
    124 : Name_Not - 2020/11/26(木) 20:36:28.06 ID:???.net (+33,+29,-22)
    特殊過ぎ?
    関数スコープであることとカツ上げ以外何かあったっけ?
    125 : Name_Not - 2020/11/26(木) 20:38:37.12 ID:???.net (+17,+29,+0)
    巻き上げやった
    127 : Name_Not - 2020/11/26(木) 22:19:46.39 ID:???.net (-27,-30,-97)
    レガシーでvar hoge=1とかfunction hoge{}とかグローバルに書くと、window.hogeが生えるのがクソキモイ。怖くて使えなーい。
    もう、関数宣言とかvarとか使わないから、モジュールでどう動くのかは知らないけど、多分使わない。

    Numberって、IEEE 754 の倍精度 64ビットバイナリ形式な浮動小数なんじゃなかったかい?
    プロパティ拡張とかも出来ないはずだから、多分ほぼそのまんまだとは思うけれど、V8の実装の詳細は知らない。

    探せばV8のソース見れるから、ソース見て追うのが間違い無いとは思う。
    128 : Name_Not - 2020/11/26(木) 22:22:33.55 ID:???.net (+2,-30,-203)
    すみません。質問させてください

    Math.floor(Math.random()
    でテキストを5~6項目程度
    setInterval('location.reload()',timer);
    で自動でランダム表示させてます。
    その際、テキスト内容をgetElementById("span1").innerHTMLでフォーム入力で書き換えたいのですが
    location.reload()でクリアされてしまします。
    フォーム入力で設定したテキスト内容をlocation.reload()でも反映させ続ける方法は
    ないでしょうか?

    基礎知識が無い中、見様見真似で作成しており不明瞭な点ばかりかとおもいますが
    なんとかご教示のほうよろしくお願いします。
    131 : Name_Not - 2020/11/26(木) 22:57:36.23 ID:/k6mmmPp.net (+32,+29,-148)
    >>124
    巻き上げられない変数など存在しない
    変数というのはスコープに属していて
    その割当範囲で有効になるものなんだから存在や定義が
    巻き上げられて行われるのは当たり前のこと
    let.constがvarと違うのは当該宣言に達するまで初期化まではされないということ
    よって仮想的にスコープの先頭から当該宣言までの間が
    変数が定義はされているけれど未初期化なので使えない区間(TDZ)となる。
    132 : 128 - 2020/11/26(木) 23:24:49.45 ID:???.net (+32,+29,-85)
    >>129
    ご返信ありがとうございます。

    質問テンプレート無視してました。すみません。

    事務所の大画面スクリーンに周知事項や注意喚起のメッセージを
    10項目程度ランダムで表示させております。
    終日表示させているので規則性があるとキツイかなと思いまして。
    現状はhtmlソースを上書き更新しているのですが
    誰でもテキストボックスやformから入力更新できるようにしたいと
    考えております。
    133 : Name_Not - 2020/11/26(木) 23:24:56.57 ID:???.net (-22,-25,-4)
    >>131
    hoistされないとかあるの!?ってなったのでスッキリした
    137 : Name_Not - 2020/11/27(金) 04:27:11.02 ID:???.net (-27,-30,-106)
    textContentプロパティとinnerHTMLプロパティの違い
    http://itsakura.com/js-textcontent-innerhtml

    <h1>あ</h1>
    などと、タグを入力された場合に、挙動が異なる

    innerHTMLでは、h1タグが解釈されて、文字が大きく表示される
    138 : Name_Not - 2020/11/27(金) 08:47:36.05 ID:???.net (-29,-30,+0)
    文字列で食わせると、evalとかfunctionコンストラクタ的な挙動になって結果動くんだけどね。デメリット挙げれば「実行される文字列の内容次第ではセキュリティ上まずい」とか「エスケープ書かなければいけなくなる」とか「呼び出してる変数のスコープが...」とか「タイマーが満たされる都度コンパイルが動く」とかかな。面倒事のが多いから使わない。


    追記せず、操作せず、上書きだけできればいいならinnerHTMLで良いんだけれどね。innerHTML触ると該当ノード内部が再パースされる。変更の都度、対象の.childNodesが作り直される。対してinsertAdjacentHTMLは兄弟ノードは保たれる。

    つまり、
    document.body.innerHTML = '<div id="dv"></div>';
    const dv = document.getElementById( "dv" );//これに何かイベント付けたり追記とかするかもよ。
    document.body.innerHTML += 'hoge';//ここはinsert(略)で処理するべき
    const dv2 = document.getElementById( "dv" );
    console.log( dv == dv2 );
    これはfalseになる。

    innerHTMLに何か流し込みたい場合、HTMLTemplateElement.innerHTMLとか使うと言うのも一手。
    Documentのノード操作でinnerHTMLって、全childNodes消したい時くらいしか。
    140 : Name_Not - 2020/11/27(金) 15:59:35.02 ID:???.net (-27,-30,-263)
    id="hoge"なエレメントが居るとして。

    const hoge = document.querySelector("#hoge");//Domの参照取得しておく
    const randamHoge = ()=>{
    const r = Math.random();
    const str = ( r < 0.5 ? "ほげ" : ( r < 0.8 ? "ふが" : "ぴよ" ) );//乱数から適当に文字列選択。
    hoge.textContent = str;//Domに反映
    setTimeout( randamHoge , 1000 * 5 );//とりあえず5秒で更新
    };
    randamHoge();

    こんな感じでやれば終わる話じゃないのかい?
    これは即席コードで修正した方が良さげな箇所多いけど。
    142 : Name_Not - 2020/11/27(金) 18:49:57.07 ID:???.net (+33,+30,-103)
    あと、こういうのって誰でも直接書き込めると問題ある内容を書き込んじゃうやつもいるから
    ログだったり反映前に承認を得るか通知を飛ばすような仕組みを用意もあったほうがいいかも
    それができなければ面倒でも1~2人の担当者を経由させたほうが無難

    会社の規模とか民度による
    143 : Name_Not - 2020/11/27(金) 21:28:32.59 ID:???.net (+27,+29,-35)
    何事もそうだが内容を規制しようというのは非常に難しい
    それよりも信頼できる人を厳選して誰が書き込むかの部分で規制したほうが良い
    144 : Name_Not - 2020/11/28(土) 00:16:25.26 ID:???.net (+27,+29,-54)
    全体リロードするからおかしくなるんだから、fetchで事足りる、
    あるいは更新したい部分だけiframeに切り出したら済むのではないだろうか?
    146 : Name_Not - 2020/11/30(月) 13:03:16.55 ID:???.net (+27,+29,-8)
    ひょっとして、レスアンカーの個数制限とか、あるのか?
    147 : 128,139 - 2020/11/30(月) 14:56:33.43 ID:???.net (+27,+29,-9)
    皆様、レスありがとうございます。
    返信頂いた内容への理解が難しく申し訳ないです。
    勉強してまいります。
    ありがとうございました!!
    149 : Name_Not - 2020/12/02(水) 11:38:13.86 ID:4cm3WIbu.net (+29,+29,-137)
    xhrもfetchもfileプロトコルは同一生成元ポリシーでエラーになる。
    同一生成元ポリシーが、fileプロトコルは全て別のオリジンと見なす、と言う動作になっている。

    一応、起動オプション触れば同一生成元ポリシーは抜けられたハズ。
    ただ、モジュールスクリプトは確か、起動オプション触るだけだと上手く動かなかった気がする。

    ローカルにWebサーバ導入する頃合い、と考えた方が良いかもしれない。
    150 : Name_Not - 2020/12/02(水) 15:57:18.38 ID:???.net (-27,-30,-171)
    VSCode の拡張機能、open in browser では、ローカルファイル・アクセスだから、CORS 制限あり
    file:///C:/Users/Owner/Documents/test.htm

    一方、Live Server では、サーバーを立てているから、CORS にならない
    http://127.0.0.1:5500/test.htm

    同様に、コマンドプロンプト・PowerShell から、
    1-liner で、Ruby で作られた遅いウェブサーバー、WEBrick を起動すると、
    ruby -run -e httpd . -p 8080

    これも、サーバー経由だから、CORS にならない
    http://localhost:8080/test.htm

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

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


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