+ JavaScript の質問用スレッド vol.129 + [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-6のテンプレを読んだ上で質問してください。次スレは>>950が>>2のテンプレ案(本スレで改善案があれば考慮)を元に立ててください
■規則/推奨ルール
・メール欄を空欄にし、名前にレス番を入れることを強く推奨(なりすまし防止)
・質問内容は具体的に。言葉だけでなく、出来る限り再現性を確認したサンプルコードの掲示。
・質問テンプレートの利用推奨。
・質問への「答え」だけでなく「意見」を出しても良い。
■禁止行為
・丸投げ質問
・迷惑スクリプトの質問
・オレオレ用語の使用(一般的な用語を使用する事)
・煽り、批判等の他人を不快にさせる行為(批判の代わりに「AよりBが良い」のような代案を出す事)
・回答者同士のレスは原則禁止(>>6を参照)
・ライブラリの話題の投稿(>>6を参照)
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。(ex: IE8, Firefox4)
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。(Windows なら「コピット」を活用)
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
1レスに収まらないならコード投稿サイトを利用してください。
http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/ 幾つかのブラウザでBlobを扱うAPIのメソッドはメモリリークを起こすが、
その実装はバクと言い切れず仕方ない面もあるという話をしてるんだけど、
まだわからないか? >>207
そのバグをJavaScriptのコードで修正できるわけがないじゃん。
JavaScriptのコードで修正しようと思っても出来ないからこそ
バグなんだから。 >>208
そうだね。
で、何が言いたいかって言うと、メモリリークで実際頭悩ませるのは
こういうバグチックなことのほうが多いってこと。
例えどんなコードでも不要になったらnullを代入を徹底するようにしても、
その労力に見合う程の効果があるか疑問ってこと。
経験上、こういう細かな1行で解決できることは少ない。
バグにしろ、アルゴリズムの不備にしろ、小さくはあるけど、
ヘルパー関数レベルで別手段に書き換えて対処する事が最も多い。 >>206
参照先でそれがnullかオブジェクトかを判断してメソッド呼べばいいじゃん
有れば使う、無ければ使わないって実装だってあるでしょ >>210
メソッドを呼んでなにかの処理をしたい場面で、
そのメソッドを呼ばなくて、正しく動くわけがないだろ
アホなのかな? >>211
「何かの処理をしたい場面で」したい場面ってなに?プログラムに意思なんてないでしょう
プログラムにしたがって処理をして、処理対象が無ければ処理をしないなんてごく普通のことだとおもうけど
絶対にそれがあるという前提でプログラムしているなら無ければ困るケースが起こるだろうけどね
君は想像力ゼロなのかい? >>212
> 処理対象が無ければ処理をしないなんてごく普通のことだとおもうけど
場合によるだろ
想定外の事態なのだから通常はエラーにするほうが正しい。
なんでそんなこともわからんのだ? >想定外の事態なのだから通常はエラーにするほうが正しい。
なぜ想定外の事態だと決め付けるのかな?
そして「処理をしない」=何もしないとなぜ脳内で決め付けるのかな?
処理対象がない->処理をしない(出来ない)->エラー処理or別の処理
ケースは色々あるでしょうに
きみまともなプログラムした事ない人でしょ? ないかもしれない場面で、ない事を確認して処理を変えるのは正しい
正しく動いていればないことはありえない場面で、ない事を確認して処理を変えるのは間違いで、例外を投げるのが正しい
今は後者の話をしているので、例外を投げる以外の選択肢はない、と言いたいのでは? >「正しく動いていればないことはありえない場面で、ない事を確認して処理を変えるのは間違いで」
まだ決め付けてるの?だれも最初からそんな事言ってないんだけどね
君が勝手に「自分の想定」を加えてわけのわからない断定をしてるだけでしょう >「今は後者の話をしているので、例外を投げる以外の選択肢はない、と言いたいのでは?」
勝手に後者の前提で話を始めたのは誰かな?
そしてさ、君プログラムわかってる?
例外、例外というが、その例外はどうするの?まさか投げっぱなしでプログラムをとめるの?
開発中ならともかく普通はその例外をキャッチして相応の処理なり表示なりするでしょう?
状況によってはロールバック的な処理は当然必要だよね
わかるかい?要するにこれって状況に応じて別の処理をしてるんだよ
例外はその検出手段にすぎない
君、大きな勘違いしているようだけどIF文で戻りをチェックすることと例外を出す事は本質的には変わらないんだよ
それをどのレイやでキャッチするか、その手法の違いなんだよ また自分より下を作ろうと必死なやつわいてるのかよ。 >>218
話がずれてるぞw
バグでメモリが解放されないものを
無理やり解放する方法(そんなものはないけど)を
使って解放した所で、お前のバグは治らないって話だ。
単にお前のバグが見つけづらくなるだけの話
例外で何もしなければ、例外は起きてないと主張しているのと一緒 バグでメモリが開放されないのは良くあるし、
無理やり開放する方法は稀だが、ちょっと手間をかけて回避する方法ならあることも多いよ。 >>222
バグはイレギュラーな存在なので、
そのイレギュラーなものに汎用的に対応できる方法などない
回避策はバグ次第なのだから、通常のメモリ解放処理でメモリリークするものが
強制的に解放する方法(そんなものないが)で動くとも思えない
そんなものを用意したら新たなバグを増やすだけ >>221
あれ?草まで生やして必死に話を逸らして何がしたいんだい?
「例外=別の処理をしない」って件を早く釈明しなよ
だいじょうぶ? >「例外で何もしなければ、例外は起きてないと主張しているのと一緒 」
例外で何もしないっていう主張をしてるのは君でしょう?
例外をハンドリングして通常とは別の処理をするという考えすら頭になかったレスしかしてないじゃん
で?
「例外=別の処理をしない」って件を早く釈明しなよ
まだかな? しかし、このバグバグと連呼してるアレな人は本当にプログラムの基本すらわかってない様子だね
彼いわく、
「参照がある=処理できるべき!」
「参照先の確認をして別の処理をするのは不要!」
「例外だせばいい!」
だもんなぁ
そもそもプログラムなんて全が自分のプログラムの範囲で値が確証されているものだけじゃないのにね
ファイルや通信、その他もろもろ不確定要素なんてあるのが当たり前なのに
実行前に確認or例外をキャッチして別処理なんてごく普通のことじゃん
だいたい、参照がある=処理できて当たり前って考えがそもそもおかしい
参照だけ残ってても中身が変化してれば意味無いのにね
ライブラリ開発とかしたことないんだろうな Tue Apr 11 01:05:14 +0000 2017
すいませんこの文字列を日本時間に直したいのですがどうすればいいでしょうか Tue Apr 11 01:05:14 +0000 2017
こういうフォーマットから、日時オブジェクトを作成するのは、ブラウザ依存じゃないの?
たぶん、全社共通のフォーマットというのは無い >>231
ISOいくつなん?
RFC822っぽいけど惜しいね >>232
ISO8601。あ、俺が言ってるのは、全社共通フォーマットはあるよ、って話。 >>233
そういう意味か
Tでつなげるの大嫌いなんだけど、あれ策定したやつ誰なん?
ちょっとみんなの前でドゲザさせたいわ 土下座するのはお前
たくさん種類がある空白を使わなくていいように
あえてそうしてることくらい分かるだろ 俺ならこうするかな?
2017-04-01@12:00:00$
2017-04-01@12:00:00+09:00$
もしくはこういう形なら統一感あっていいかも
D2017-04-01T12:00:00Z
D2017-04-01T12:00:00+09:00Z
>>235
おまえはばかだなぁ またやってるのかよ。
質問者に正解の答えもしくは誘導できたらそれで終了のスレで自分より無能な下を作ろうと必死なやつはワッチョイ隔離スレでやってくれ。 ・質問への「答え」だけでなく「意見」を出しても良い。 漏れは、2chの日時表示から、正規表現で、Date型へ変換した
var str = "2016/09/09(土) 09:00:08.09 ";
var re = /(\d+)\/(\d+)\/(\d+)/; // 日付
var ary = str.match(re);
var re2 = /(\d+):(\d+):(\d+)\.(\d+)/; // 時刻
var ary2 = str.match(re2);
// Date 型へ変換する。
// ary[2]は、-1。ary2[4]は、10倍
var dt = new Date(ary[1], parseInt(ary[2]) - 1, ary[3],
ary2[1], ary2[2], ary2[3], parseInt(ary2[4]) * 10);
console.log(ary, '\n', ary2, '\n', dt, '\n',
dt.getMilliseconds() + "ミリ秒");
出力
Fri Sep 09 2016 09:00:08 GMT+0900 (東京 (標準時))
何かのライブラリに、変換できる関数があるかも?
無ければ自分で作る。
jQuery UI にも、DatePicker というのがある JavaScriptで日付用ライブラリとして有名なのはmoment >>237
何度も書いてるが意味わからんよそれ
誰かの発言で上下が変わったり無能になったりする訳でもないし
本当に無能だと思えば取り合わないだけでしょう @と$は本質的に全く変わってないじゃん。
頭にDは無駄。
Tは、Tまで読み飛ばすシーンがあるから必要なのであって、先頭文字は必要ない。
時刻Zは時刻+00:00の糖衣構文だから、09:00Zはありえない。
なんでこうなったかを考えない奴居るんだな >>242
なんでTにしたん
もっと違う記号あったやろ
アンダーラインとかでもええのに
なんでTにしたん >>243
SQLでいちいちワイルドカードになったら嫌じゃない?
標準式の方(‐:なし)で時刻だけもらった時に、20時17分で有ることを担保するために、時刻だけには印ついててほしいもわかるし。
日付表記みたいにWとか新しい形が出てこないと限らないから、有意な文字を当てるのは変じゃないと思う >>242
TimeだからTなんじゃない?
逆にTではまずい理由も特にない
「分かりにくい」って単に慣れの問題だし、Zも終端子としては分かりやすい
英語圏にとってはアルファベットが親しみやすいんだろうよ
慣れろ 教則本を取り組みながら勉強中の超初心者なんですが、
update(メソッド?)というのが何の説明もなく唐突に出てきて、
検索しても出てこないので意味が分かりません。
どういう意味ですか? function push() {
var v = Math.floor(Math.random() * 10);
var r = data.push(v);
update(r);
}
という感じです すみません、解決しました
普通に読み進めていったらupdate関数が定義されていました; >>253
細かい説明は後からどんどん付け足していくのが英語文化、というのを覚えておくといいかもな 随分と優しい説明だな。
ここは特殊な2ちゃんスレなのだから、もっと屑扱いしてやらんと育たんぞ。 そりゃマサカリもただじゃないからな
投げてやる相手くらいは選ぶさ 学生のとき作った認証関連の某自作ライブラリが10万DLこえたのに驚愕
まあ海外からの評価が異様に高いのが人気に繋がったのか・・
まだ一度も突破テスト等で破られてないみたいのが奇跡 自信があるならグーグルやマイクロソフトに売り込んでみよう
結果はここで報告してくれよな >>258
すげーじゃないか。ここで晒してみてよ。 minifyとかコンパイルとか一般的になって来てるなら、
もうバイナリにコンパイルしちゃえば?
という気もするのですが、世界がそうならないのは何故ですか? >>262
重要なのは互換性。
今までのものが今まで通り動くことだから。
バイナリにコンパイルして動かなくなったら
意味はない それがWebAssemblyじゃないの。
でもあれって直接DOM操作はできないんだっけ ま、まあ、コンパイル済のJavaアプレットは残念な出来栄えだったしなあ… オブジェクトのディープコピーを簡単にする方法でおすすめ教えて? jquery.extend() に、deep を指定する >>269
それだと変数以外の情報全部失われるでしょ
>>270
それだとjqueryじゃない環境で動かないでしょ もう今更話すことでもないでしょ。この部分は昔から進歩がないんだから。
長年ESコミュニティで提案されているStructure Cloneが実るまではね。
ただこれに近い非同期版がDOM仕様にあるので、非同期で良い場合はMessageChannelを使う
同期が良ければぶっちゃけワンライナーで簡単なのはJSON、
ちょっと手を加えてObject.assignを使えば簡潔な関数を作ることも可能
どれも一長一短があるので好きにしたら良い DOMからエスケープ前の文字列を取得したいんですが
具体的には©のような文字列です。その場合ってどうすればいいんでしょう
Node.nodeValueだとエスケープ後の文字列になっちゃいます >>273
innerHTML or XMLHttpRequest or fetch >>268
> オブジェクトのディープコピーを簡単にする方法でおすすめ教えて?
JavaScript標準でやれないことをやりたくなった時が
ライブラリを導入するべき時だよ
例えばlodashを使う
https://lodash.com/docs/4.17.4#cloneDeep ライブラリ導入したくないなら必要な部分だけパクってこい その必要な部分だけを取ってくる方法が
lodashのカスタムビルドである
https://lodash.com/custom-builds JavaScriptとcssって再利用しにくいよね
ライブラリAがjQuery1.xに依存
ライブラリBがjQuery3.xに依存
でもAB同時に使いたい
とか
名前空間サポート無いせいでjs classやcss classが被ったり > ライブラリAがjQuery1.xに依存
> ライブラリBがjQuery3.xに依存
> でもAB同時に使いたい
いや、JavaScriptにかぎらず、
それができる言語を知りたいぐらいなんだが? > 名前空間サポート無いせいでjs classやcss classが被ったり
AngularやReactなんかではscoped cssが使えるから
かぶることもない >>282
他の言語知らないやつ多すぎだよな。まあ許してやれ。 他の言語知っているのなら、他の言語の例を言うようにw 1画面内でバージョンの異なるjQueryを共存させるには
http://rei19.hatenablog.com/entry/2013/03/25/000818
$が、1.9.0 で、$132が、1.3.2
var $132 = $.noConflict(true);
(function($){
// ライブラリ本体のjavascript・・・
})($132)
Underscore.js でも、_ を別名にできる 初心者です。テーブルでA1はHTML内で5に指定、A2に<input type ="number" value ="1">があって、A1セルとA2セルを足したい場合
rowsとcellsで指定するとA2がNaNになり結果が5NaNになるんですがどうしたらいいですか?
この場合inputの初期値0は効かないのでしょうか?A2をparseIntで囲ってもだめでした NAN は、数字ではないって事
ソースコードを書いてから、質問してくれ。
ソースコードが長い場合は、JSFiddle などに貼ってくれ わかりにくくてすみません。レスありがとうございます
ツールの使い方がわからず、ボタンを押しても反応がないですが、、
個々のファイルにしてブラウザで確認するとgoukei=6になります
最終的にjqueryのblurとかでinputの値が変更されたら該当列全ての値を足して一番下に表示させるのが目標です
https://jsfiddle.net/itioku/Ldvn08jL/ >>280
つーかnpm使ってれば自然にそうなるでしょ?
npmで外部パッケージ化すればいい。
外に公開しなくてもnpm linkすればいい >>288-290
F12開発者ツールを起動して、1行ずつデバッグするとか、変数をwatchすれば?
それか、あちこちに、console.log() を書いて、どこでおかしくなるのか、変数を見る >>290
そりゃセルの中に要素作ってるんだから考えてやらないと
値とるだけなら
table.rows[4].cells[4].innerText
↓
table.rows[4].cells[4].firstChild.firstChild.value
でとりあえず取れるけど 出力が全部stringだとわかっている時
改行有りのテキストの出力時に""がつくと微妙に先頭がずれます
"を無くして表示したいのですが可能でしょうか >>295 訂正
console.logでconsole画面に
を忘れていました よくよく調べたらchromeだと"は付きませんでした
firefoxだと例えば
console.log("あ\nい\nう\nえ\nお");
とすると
"あ
い
う
え
お"
と出力されます
もう諦めてchrome使うことにしますお騒がせしました >>293
教えていただいた方法で実現できました!ありがとうございました
>そりゃセルの中に要素作ってるんだから考えてやらないと
これからもめっちゃ役に立ちそうです! >>299
イベントハンドラはHTMLに書いたら動かないって事でしょうか?
今のところはjsfiddleが動かなくて困る事はないですが、心にとめておきます
数値取得方法もそんなやり方もあるのですねありがとうございます! 初心者です
オンクリック属性について教えていただきたいです
//=====================================
var arr =["A","B","C","D","E"];
var element =document.getElementById("testBox");
for(var i=0; i<arr.length; i++)
{
var span =document.createElement("span");
var str = arr[i];
span.onclick= function(){alert(str);};
element.appendChild(span);
span.textContent = arr[i];
}
//=====================================
クリックするとそれぞれの配列の内容が表示されるようにしたいのですが、どれを押しても配列最後の文字列が表示されてしまいます
どこを直したらいいでしょうか
よろしくお願いします jsでhtmlを生成
オンクリックをforで動的に変更生成させてやってみれ
短く早くかけるぞ >>302
ありがとうございます
軽く検索してみましたが、初心者過ぎて回答の内容が理解できませんでした
せっかくレス下さったのにすみません
回答いただいた内容でもう一回調べてきます >>302
多分教えていただいたこととは違うと思うんですけど、分けたらできました
ありがとうございました
//=====================================
var arr =["A","B","C","D","E"];
var element =document.getElementById("testBox");
for(var i=0; i<arr.length; i++)
{TestFunc(arr[i]);}
function TestFunc(value)
{
var span =document.createElement("span");
span.onclick= function(){alert(value);};
element.appendChild(span);
span.textContent = value;
} >>304
できたら取りあえずはそれで良しだがその書き方なんとかしろよw
もっと簡潔にすっきり記述できるよう努力しなさい。 >>305
はい
もう少しjsの理解が進んだら、記述の簡略化も調べてみます
アドバイスありがとうございました ■ このスレッドは過去ログ倉庫に格納されています