+ JavaScript の質問用スレッド vol.122 +©2ch.net
>>834 厳密に言うと、最大添字数+1でしょうね
添字が0から始まって要素が隙間なく埋まってたら要素数と一致するが
そこにも書いてあるじゃない lengthの値と実際の要素数は一致しないこともあると
>>835 あなたがいいたかったのはこういうことだろうか
var numbers = [1, 2, 3, 4, 5];
console.log(numbers.length); // 5
delete numbers[1];
console.log('1' in numbers); // false
console.log(numbers.length); // 5
numbers.forEach (function (element) {
console.log(element); // 1 -> 3 -> 4 -> 5
});
> そこにも書いてあるじゃない lengthの値と実際の要素数は一致しないこともあると
MDN で説明している不一致になるパターンは「length プロパティを実際よりも大きな値に書き換えた場合」であなたの説明とは無関係だと思うのだが…
(実際にはほぼ使わない例外的な挙動なので私はこれを考慮していなかった)
結論としては、下記のようになるということか
・length は「最大数値添字値+1」を返す
・ただし、ユーザが実際の要素数よりも大きな数値で length プロパティを書き換えた場合はその値を返す
lengthは「長さ」だからなあ
サイズとはまた違うものだと思う
このスレのどこかにあったけど、サイズを調べるのは Object.keys(a).length でできるよ
>>836 こんなんでもいいんじゃない?
var a = [];
a[100] = 'a';
これでlengthは101だけど要素数は1だよね
要素数を返すという根拠にそのページを挙げてたと思われたので、
そのページでも実際の要素数とは区別して書いているんだよと言いたかった > 書いてあるじゃない
>>836 for 文だと hasOwnProperty を使わないと Array.prototype.forEach と同じ挙動にならないんだな…
>>837 Map.prototype.size と Array.prototype.length の挙動が違うようなものか
Object.keys のコードは
>>531だな
>>831 その理解でもまああんまり問題ないけど、正確に言うと違う
JavaScript の Object のプロパティ名はすべて String型(ES6 から Symbol型 も加わったが)
Array の添え字ももちろん String型 で管理されている
var a = [];
a[5] = true;
a["1"+"0"] = true; // a[10] = true; と同じ
alert(a.length); // 11
for(var i in a) alert(typeof i + ": " + i); // 「string: 5」「string: 10」
あとそのサイトはES3なので、今更そのサイトを参照元にするのはお勧めできない
>>840 > JavaScript の Object のプロパティ名はすべて String型(ES6 から Symbol型 も加わったが)
わかってはいたが、
>>826が理解できる説明をする自信がなかったので簡略化してしまった
下記のように理解してる
---
var newLenDesc = ToUint32(propertyName),
oldLenDesc = this.length;
if (newLenDesc !== ToNumber(propertyName)) {
throw new RangeError;
}
if (++newLenDesc > oldLenDesc) {
this.length = newLenDesc;
}
--
> あとそのサイトはES3なので、今更そのサイトを参照元にするのはお勧めできない
これは大分迷ったが、
>>826に紹介するなら日本語でないと読めないと思ったのであえて古い ES3 を紹介した
読めそうな人には ES5 を紹介するんだが…
http://es5.github.io/#x15.4.5
842 :
840:2015/02/07(土) 17:49:30.41 ID:???
843 :
841:2015/02/07(土) 21:14:40.37 ID:???
>>842 いや、私も全ての仕様を熟知しているわけではないので細かな点まで指摘してもらえるのは有難い
今にして思えば、「厳密には違うが、簡単に説明すれば」の前置きを置いたり、ES3, ES5 のURLを併記すれば良かったように思う
私も積極的に指摘するので今後も指摘して貰えると助かるのが正直な気持ちだ
ところで、「プロパティ名はすべて String型」だが、正確にはプロパティ名に型は存在しないので、内部処理で「プロパティ名は String 型にキャスト(型変換)される」が正解だと思う
プロパティアクセス演算子で扱える型に制限はなかったはずなので a[NaN] も a[true] も問題なく評価できるはずだ
(ES6 では Symbol 型、Map、WeakMap だけ扱いが特殊だが)
> 唯一見れるのは
http://tsofthome.appspot.com/ecmascript.htmlくらいかな?
知らなかったが、部分的でも和訳があるのはいいな
テンプレに入れてもいいぐらいだと思う
俺としては、
>>3を消したいな。
あれIE6ぐらいの時代のもので
今となっては説明不足&間違ってる&どうでもいい話
> Q4. フォーム部品名を変数にした「...myform.変数名.value」が動きません…
> A4. 「document.forms.myform.elements[変数名].value」でどぞ。
これとかさぁ、今は普通フォームにID付けて
getElementByIdとかするだろ・・・ってな。
一体いつの知識なんだか。
実際のところ、
>>3は定期的に消す要望が出るが、賛成意見が出てこなくて保留することが多い
とはいえ、サイレンとマジョリティの可能性もあるので、
>>3を消した版も作って意見を待つべきか...
http://fiddle.jshell.net/vSqKr/35/show/ も古い情報を基にして作っているところがあるな
Q2. JavaScriptでローカルファイルを読み/書きたいのですが…
Webではセキュリティ制約により絶対無理です。できたら恐ろしいことに…
⇒window.postMessage or XHR2 で可能
Q2. JavaScriptでローカルファイルを読み/書きたいのですが…
Webではセキュリティ制約により絶対無理です。できたら恐ろしいことに…
⇒File API でファイルの読み込みは可能
Q9. <a href="
http://example.com/" onclick=""> で動作指定してるのですが時々動きません…
return false; でデフォルトアクションを抑制しないとページ移動してしまいます。
⇒そもそも、リンク処理を抑制させるなら a 要素で表現しようとするな
Q14. setTimeout() やイベントハンドラ関数に設定するコードに this を含めたいのですが…
this を別の変数(下例では that) に束縛し、その変数を使って対応してください。
⇒Function#bind でもOK
Q17. document.getElementById('hoge') や $('#hoge') で要素ノードが取れないのですが…
コード実行時点でHTMLがそこまで読まれてない。window.onload 中でやるとか。
⇒addEventListener (attachEvent) を使うべき
いつもテンプレ編集お疲れさんです
そもそも論だけど、
>>3については適当な質問者は読み飛ばす文量だし
またこれを見て理解できる人はそれ以前に検索で答えを見つけられると思う
該当する質問がきたらアンカー投げる先って程度の役割なら不要かな
もちろんやる気のある質問者のためにFAQへの誘導文は残すべきだけど
>>853で Q2. を2回書いたが、一方は Q1. を書いたつもりだった
Q1. 開いた別窓/フレームの内容にアクセスできないのですが…
ページ内容が別サーバの場合セキュリティ制約により絶対無理です。
⇒window.postMessage or XHR2 で可能
>>3を消すなら、開発者ツールやDeveloper Toolsの基本的な使い方でも書くといいと思うな
実際、これが使えればすぐ解決するような質問は多いし
あと、
>>4のDHTMLはさすがに古すぎだしいらなくね
循環参照もテンプレに入れろよ
>>856 「Developer Toolsの基本的な使い方」はあったら便利だと思うが、どこまで説明したものか
- ページ上で右クリックして [要素を検証] -> [Styles], [Computed], [Properties] でステータス確認
- [Ctrl] + [Alt] + [J] でコンソールを呼び出し、コンソールデバッグ
- Breakpoints
正直、Breakpoints は上手く説明できる自信がない
>>857 定期的に要望が出るので入れようとは思うが、「言うは易し」という言葉があってだな
循環参照は初心者が引っ掛かる内容でもないしテンプレ入りは不要でしょ
頻出する話題としてテンプレ案に設けるのが理想的だと思うけど中の人の負担が強いかな
じゃあなんか循環参照のレスで大量消費するつもりなんだよ
>>859 指摘されて気がついたが、テンプレではなく、FAQ入りとして脳内変換していた
そもそも、文章量が1レスに収まらない事が予想されるのでテンプレ入りは無理だ
現在は下記の構成で考えている
-
>>3を削除してFAQへのリンクのみにする(
>>851,854,856)
-
>>3に「Developer Toolsの基本的な使い方」を代わりに入れる(
>>856)
- FAQ(jsfiddle)に循環参照の説明を入れる(
>>857)
> 頻出する話題としてテンプレ案に設けるのが理想的だと思うけど中の人の負担が強いかな
循環参照については説明量が多すぎるので時間がかかるのは事実
早くても今夜帰宅して、「Developer Toolsの基本的な使い方」まで書ければいいところだろう
気長に待って欲しい
おつおつ
書き起こしとか一人で一々やってたらキリがないわな
適当な解説にリンク貼ってよさ気なレス書かれたらそれと入れ替えればいいんじゃない
要望出すだけ出して文章を一人に丸投げしている現状が異常だと思う
自分が要望を出したときには文案ぐらいは出していたし、簡単な更新ならやったことがある
「テンプレ更新者が専任でいて頼めば何でもやってくれる」という風潮が良くないと思うな
全部やれとまではいわないけど、簡単な文案を出すとか、テンプレの要望リストに載せるとか、可能な範囲で要望者も作業を負担すべきだと思う
JavaScript界でフォローすべきTwitter アカウント一覧を入れるべきだ
・mizchi
・kyoago
この二人をウォッチしとけばJavaScript素人も自然と能力を伸ばすことが出来る
ジャップ技術者にそんなレベル高い奴いるわけねーだろ
日本語大変お上手ですね
ジャップの掲示板にわざわざ出張しての書き込み、ご苦労様です
そういうのはネトヲチ板でやってね
・jagarikin
ユーザ名を掲載するのは本人の迷惑になるので今すぐに止めるべきだ
前も書いてたな
書いてるの同一人物だろ
それってprogrammerprofile.netに勝手に登録されることにも言えるね
俺は初心者だから有名な人を挙げてくれるのは助かってる
そもそも何の迷惑になるのか疑問
自分の名前が上がらないから嫉妬でしょ、たぶん
名前書いてる奴は性格が気持ち悪いから
わざと叩かせようとしてるみたいな印象を受ける
thisのことをコンテキストと言いますが、いまいちしっくり来ません
「オブジェクト自身」とでも呼んだ方がいいと思います
どの辺がコンテキストなんですか?
2ちゃんだから叩くっていう発想自体が気持ち悪い
>>880 コンテキスト=状態とすると
JavaScriptのthisは状況に応じて参照しているオブジェクトが変わるから
thisをコンテキストと呼んだりするんだろう
他の言語ではコンテキストなんて言わない