JavaScript 4©2ch.net
ああ、間違った。 >>2 は関連スレ-2です。 次スレは>>980 あたりでお願いします。 ノ ゚.ノヽ , /} ... ,,イ`" 、-' `;_' ' ..::::::::::::::... ,-、 _.._ ( (,(~ヽ'~ ..::::::::::::::::::::::: )'~ レー' 〉 ヽ i`'} .::::::::::::::::::::::: ~つ '-ー、 i | i' ...::::::::::::::::::::::: / < / 。/ ! ......::::::::::::::::::::::::: これは>>1 乙じゃなくて / ~^´ /},-'' ,●:::::::::::::::::::::::::::::::::::: i、 ,i' _,,...,-‐-、/ i :::::::: .::::::::::::: ..ゝ <,,-==、 ,,-,/ .::::::::::: 放射能がうんたら ) {~''~>`v-''`ー゙`'~ ..::::::::: ........::. { レ_ノ ..::::::::. ......::::::::: ノ '' ..::::::: ...::.:...::::::::: .::::::::: ...:......:::::::::::: . .:::::::::::. ..... .. ..:::::::::::::::::::::::: :::. ::::::::::::::::.::::::....:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.. :: ::.. .:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::: ::. ::::::::::::::::: :::::::::::::::::::::::::::::: ::::: .:: ::. ::: ここはJavaScript4のスレです http://ja.wikipedia.org/wiki/ECMAScript#ECMAScript_4 ECMAScript 4 「JavaScript#JavaScript 2.0」も参照 ECMAScript 4 は過去2回仕様作成が挑戦されたが、仕様がまとまらず、失敗に終わっている。 1回目[編集] 2000年〜2003年ごろ行われた。主に、旧Netscape社とMicrosoft社によって行われたが、意見がまとまらずに、打ち切りとなった。この時の案は ActionScript へと引き継がれた。 http://www.mozilla.org/js/language/old-es4/ - 昔のNetscape草案 2回目[編集] 2007年〜2008年ごろ、2回目の仕様作成が行われた。大きく機能を追加される予定であったが、意見がまとまらず、2008年8月13日に、小規模の改善にとどまる、ECMAScript 3.1 を進めることとなった[3]。仕様は、http://www.ecmascript.org/docs.php にて公開されている。 以下のような予定があった。 大規模・大人数開発のための機能の追加[要出典] 型に関する機能の追加[要出典] ジェネリックプログラミングの機能の追加 ECMAScript 3 が下位互換だが、互換でない仕様が一部に入る[要出典] ActionScript 3 の上位互換だが、互換でない仕様が一部に入る[要出典] いやいやいやいやいやいやいやいやいやいや、 ただのPart 4ですからー残念! >>2 そういやWeb制作板の方にも質問スレがあったんだった。 + JavaScript の質問用スレッド vol.121 +©2ch.net http://peace.2ch.net/test/read.cgi/hp/1415213701/ そして>>6 は一体どこの誤爆? lodash 3.0 リリース間近! https://github.com/lodash/lodash 3.0-preから-preが外れました! スレが多すぎてどこに書けばいいかわからないので 関連スレすべてにマルチポストしています。m(__)m せっかく貼ってもらって恐縮だが ここは関連してない http://www.mpi-sws.org/ ~rossberg/papers/JSExperimentalDirections.pdf GoogleはJSに「新モードを追加する」という方向性に舵をきり始めた。 GoogleはSaneScript、SaneModeをV8上に今年上半期に実装する。 これはJSの機能を一部制限し、動作を変えることで強力な最適化を可能にする。 語弊を恐れずに言うと、asm.jsの発展版であり、 asm.jsがJSの10%の機能、ユースケースをターゲットにしたものなら、Saneは90%程度だ。 そして今年下半期にはSaneとシンクロする型システムを導入し、SoundScriptとなってharmonyの次の音色をJSにもたらす。 JSは静的&動的型付け、クラス&プロトタイプベース言語となってあらゆる人々の要求に答える言語へと成長する。 それは遠い未来の話ではない。1年の間にその変化が起こるのだ。 よくわかんないけどウェブプログラマがIEを恨む時代からChromeを恨む時代になる? 違う。これを発表したのはまさにTC39Meetingでだ。 だからGoogleはこれがES7あたりで標準になることを望んでいる。 O.oのときと同じく先行実験をするということ。 しかしJSが徐々に「Living Standerd」化していってるのは否定しない。 これは良い悪いではなく抗えない時代の流れなのだと思う。 そういえばこれと同じようにMozilla陣営が実験を進めていたParallelsは、 共感が少ないということで白紙に戻ったそうだ。 この取り組みが成功し、標準になるかどうかは結局は我々開発者の評判次第ということだ。 皆はasm.jsを手書きで書こうとして詰まったり、思ったよりパフォーマンスが上がらなかったことはないだろうか。 Saneなら違う。SaneはほぼJSの感覚で手で楽にかけるし、パフォーマンスだけでなくリーディングの面でも素晴らしい効果をもたらす。 問題はこのJSにモードを増やすという考え方が、開発者たちにとって歓迎されるかどうかだ。 このasm.jsについてのissueを見てほしい。 https://code.google.com/p/v8/issues/detail?id=2599 10でも多いレス数は80。100で大人気のスター数は630。 当初Googleはasm.js向けの最適化はしないと言っていたのが徐々に主張が変わり、 今では新最適化エンジンで"use asm"を認識し、最適化モードを切り替えられるようにしたほどである。 今回の"use sane"アイディアはこういったことから開発者の受けがいいと判断してのことだろう。 asm.jsで目的は達成してるし他にはいらん しかもasm.jsはソースがグチャグチャになるからアセンブラ並の難読化の役割も果たしてる 分かりやすくして欲しくない asm.jsはネイティブのコードをJS化するときに活用できるものであって、 "use strict"の強化版的なSaneModeとはユースケースが違う。 特にvarの使用位置にこだわる人やLint勢、クラスベース言語経験者からは喜ばれると思う。 Sane/Soundで一番JSらしくなくなるのはオブジェクトが拡張できなくなる点だが、 sealedされて型のついたオブジェクトというのは、ES7で前々から提案されていたTypedObjectと同じだ。 コンストラクタがデフォルトでTypedObjectを返すようになるモードと考えれば、違和感も薄れるかもしれない。 pdf読んだが、ただのstrict modeの拡張レベルの話しだな SoundScriptの方にいたってはTypeScriptのパクリだし TypeScriptパクる奴は後を絶たないな パクリも何もTypedScriptは元々ES6に向けたharmonyの機能を先行して実装し、 それに加えてES4の頃からアイディアがあってES7辺りでの実現が見込まれていた型注釈を組み込んだものだよ。 そしてTypeScriptの目標は自身(型注釈)がES7で取り入れられて最終的に用無しになることだからね。 CoffeeScriptなんかとよく並べられるが、どちらかと言うとtraceurや6to5みたいなトランスレーターの仲間と考えた方がいい。 とは言えTSの型注釈はコンパイル時の整合性チェックのためのもので、実行時に活用するSSとは少し有り様が違う。 >>24 JavaScriptに型注釈が取り入れられるわけないし必要ない それにブラウザ内蔵オブジェクトに正しく型を付けられるようにしたのはTypedScriptが最初だ アイディアレベルのものと実際に実用的に動くものにしたのでは天と地ほどの差がある 実行時に活用するのは同じGoogleのAtScriptがあるだろ >>25 >>型注釈が取り入れられるわけない そんなことはない ただし、ESでの型注釈は現状無難なguardの方向になる可能性が一番高い SSはもっと踏み込んでる >>ブラウザ内蔵オブジェクトに正しく型を付けられるようにしたの〜 DefinitelyTypedについて言っているのならそれは完全にTSの功績 だがそれはTSの型注釈がコンパイル時の検証のためのものだから必要なのであって ランタイムのチェックには必要ないもの >>アイディアレベルのものと実際に実用的に動くものにしたのでは天と地ほどの差がある 別にTSの実装が最初かどうかは論じてない パクリかどうかについて言ったまでのこと そういう論展開ならなおさら実装をパクったわけではないからぱっと見似ている機能を入れてもパクリでないということになる >>AtScript〜 もしguardのことを言っているのであればそれもまたES7アイディアの一つで別軸、別機能、別の話 >>26 > ただし、ESでの型注釈は現状無難なguardの方向になる可能性が一番高い guardはブレンダン・アイクにいらねー言われてたよ > DefinitelyTypedについて言っているのならそれは完全にTSの功績 ブラウザ内蔵オブジェクトは単純なclassの定義だけじゃ型付け出来ないものがある TypeScriptは若干独特な仕様のinterfaceを導入して正しく型付けしている >>27 guardそのものではないが、実行時の型チェック→エラー機能に留まる≒guardということ。 それと別に型が正しく型付けできない云々はあくまでTSの問題。TSが型をどのように定義し利用してるかの問題であって、一般的な話ではない。 そもそもTSにおける型とは架空のものだから。架空のものなのはJSが曖昧だから。 その点SSはそもそもクラスベースの世界だからインスタンスに紐付けられているクラス情報で判断できる。 で、ビルドインコンストラクタについてはどうやって外部の(プロトタイプベースの)世界と折り合いをつけるのかが示されていないから、 ランタイムチェックについては問題ないがAOT最適化をどうやるのかはなんとも言えない。 Effective JavaScript読むとJSのきもさに眩暈がするな 元々ガチ向けじゃなかったものをガチ向けにした気持ち悪さ まるで遊戯王 どんな言語でもプログラムした事無い素人の典型的なレスだな(笑) キモイだろ。普通に。 ここまで捏ね繰り回されたコードが普通に使われる言語は珍しい。 他の言語だとそういうキモイコードは、面白いけどさあ、で大体終わる。 まあ皆キモイと思ってるから各種altJSが出てくるんだろうし >>34 そんなこと思ってる奴は全体でも1割もいない >>33 キモいってのは (function() { }()); ぐらいで他は特にないけど何がある? やべえ、そのくらいじゃ全然キモいって思えねえ まだobjectiveCのがキモい >>38 巻き上げの説明でよく出てくる例 var myname = "global"; function func() { console.log(myname); //出力内容は? var myname = "local"; console.log(myname); //出力内容は? } グローバルと同じ名前のローカル変数を定義してる時点で問題があるが、別の言語だと "global" "local" と出力されるだろうが、そもそもローカル変数にアクセスしようとしてたら どっちみち意味不明なバグになる JavaScriptは親切に undefine "local" としてくれるから逆に分かりやすい セミコロンの問題はわざわざヘンテコな書き方をしない限り誰も問題とは思ってない しいて上げれば末尾カンマの方が問題だ ただ全部jshintをすれば事前に分かるから普通に書けば問題にはぶつからない >>36 のイディオムだけは使いまくるからどうにもならんけどな >>39 C#とかPythonだと上位スコープと同じ名前が後でローカル変数として宣言されるときは、宣言前に使うと構文エラーになって100倍わかりやすいんだが あと b = 10 (function(){})() とかくと10が関数でないってエラーが出るし、関数返したりするとエラーすら出なくなるんだけど、セミコロン省略派の人はjshintで問題を見つけられるの? >>40 根本的に仕様が違う言語を持ち出すなよ 巻き上げの話しをしてんだから、せめて同名ローカル変数を許す仕様じゃないと比較する意味無いだろ そんな事言ったら 同名ローカル変数を許す言語<許さない言語という結論で終わる(それには同意する) jshintのデフォ設定ではセミコロン省略すると大量に警告が出る(>>40 で2つ警告が出てる) > とかくと10が関数でないってエラーが出るし、 エラーになるならそれでいいだろ > 関数返したりするとエラーすら出なくなるんだけど どういうコードか分からんかったが、それはエラーじゃないんだろ >>40 https://github.com/then/promise ちなみに↑このライブラリの人はセミコロンを一切書いてない(lib内のソースとか) それだけで使う気は失せたが一応ちゃんと綺麗に書けてる 同名ローカル変数は許すよ。javascriptで巻き上げてundefinedになる状況がエラーになる。 http://ideone.com/7fi2bK セミコロンで挙動が変わるのは極端だけどこういうの function test() { ・・console.log("A") ・・return function(){ ・・・・console.log("B") ・・・・return function(){ console.log("C") } ・・} } test() //無=>ABC 有=>AD (function(){console.log("D")})() もっと単純でこういうのもあった var a = [["A","B"],["C","D"]] [0].map(function(i){ console.log(i);}) あと、即時関数も書いた人の宗教によって (function(){ console.log("test1"); })(); (function(){ console.log("test2"); }()); +function(){ console.log("test3"); }(); みたいにいろんな呼び方があってキモいじゃん? 想定外の書き方が来ると?になるから、統一してほしい >>42 boostrapなんかもセミコロン省略教だったりする 上みたいな状況がどうしても出てくるなら、行の先頭にセミコロンつけろだとさ >>43 > 同名ローカル変数は許すよ。 お前何様だよ > test() //無=>ABC 有=>AD 残念大間違いw test() //無=>ABC 有=>ABC >>44 違ったあってた そもそも (function(){console.log("D")})() ↑この書き方がイレギュラーな書き方なんだよ、それは最初に言っている どんな言語だってコーディングスタイルの違いで変な書き方なんてあって当たり前だ JavaScriptだけが特別じゃない >>44 >お前何様だよ いや、お前が同名ローカル変数を許す言語にしろって言ったんだろ 念のためだが、俺が許すんじゃなくて、(C#やPythonの文法が)許すだからな? >どんな言語だってコーディングスタイルの違いで変な書き方なんてあって当たり前だ >JavaScriptだけが特別じゃない 設計じゃなくて文法と仕様が奇怪なのがjavascript しかも、ときどき理解せずに踏んでしまう可能性がある どの言語もしない変数の巻き上げ、使い物にならないtypeof、未定義値と限らないundefined、なぜかスコープを作らないブロック、オブジェクトなどに演算子を適用してしまうとエラーも出さずする不可解な挙動 配列は連想配列のように使えるけどfor inが安全に使えない、lengthが要素数を返さないなどなど、歴史上しょうがないのはわかるが、きもい funtion(){}()と書けない理由も知らないで使っている人が多そう 別にjavascriptが嫌いなわけではないんだけどな >>46 変数の巻き上げは実際には問題にならないって言ってる(そもそもそのコードがバグってるから) 神経質なやつが騒いでるだけ > 未定義値と限らないundefined これは意味が分からん undefineを代入出来る事が気に入らないのか? > なぜかスコープを作らないブロック これは (function() { }()) の事でこればっかりはしょうがないと最初に言ってる > オブジェクトなどに演算子を適用してしまうとエラーも出さずする不可解な挙動 var o = {}; console.log(o + o); // [object Object][object Object] そんな事するわけないけど何か問題あるのか?意味が分からん > 使い物にならないtypeof これなんか完全に嘘を言って誘導しようとしてるな 普通に使ってるコードを山ほど見るけど、全部バグか? これで完全に化けの皮が剥がれたな >変数の巻き上げは実際には問題にならない エラーになったほうがバグがすぐわかるじゃん 巻き上げる利点が何もない >未定義値と限らないundefined かなり最近まで「undefined = 1;」とかできた。「undefined 判定」とか検索すると苦労の跡が見える。 最近は変更できなくなったが、古いブラウザへの対応と残されたコードを理解するために知る必要がある。 でも、予約語ではないので変数名には使えて function(){ var undefined = 1; console.log(0[0] === undefined); } とやると0[0]は未定義なのにfalseになる。本来予約語にすべき。 > 使い物にならないtypeof それはさっきあげたJavaScript Gardenより http://bonsaiden.github.io/JavaScript-Garden/ja/#types.typeof 唯一有用なundefinedの判定は上に書いたとおり言語の欠陥がなければいらない記法 文句があるならこれ書いた人にpullreqでも送っとけ >オブジェクトなどに演算子を適用してしまうとエラーも出さずする不可解な挙動 無論、わざと書くことはない。しかし、変数の中身の型を間違えていたりしても一見正常に動いて、中身が変わるとコケる場合がある。 初心者が===を==と書くともっと不思議な動作をするし、逆にこの手の処理がイディオムなってたりもする 以下長いが、これ全部結果の型と値わかる?これ全部結果の型と値わかる? 10*[5] 10*["5"] 10+[5] 10*[null] 10*[undefined] 10*[true] 10*[] 10*{} 10*[5,6] 10+true 10-true 10+[true] Math.min(1,5,null,10); Math.min(1,5,undefined,10); Math.min(1,5,[],10); Math.min(1,5,{},10); [] === [] !![] === !![] Nan === NaN ~NaN -NaN parseInt(true) parseInt([]) Number(true) Number([]) "aa" === new String("aa") "aa" == new String("aa") [1,5,10,50].sort() ["aa",NaN,[2],[1],["a"],[NaN],{"0":2},{"0": 1}].sort() >>48 > エラーになったほうがバグがすぐわかるじゃん だからundefinedになるからエラーになるって言ってんじゃん > かなり最近まで「undefined = 1;」とかできた。「undefined 判定」とか検索すると苦労の跡が見える。 せめて"use strict"での話しをしろよ > それはさっきあげたJavaScript Gardenより > http://bonsaiden.github.io/JavaScript-Garden/ja/#types.typeof 糞記事 "foo" String string 1.2 Number number true Boolean boolean 少なくともこれが分かる時点で使い道はあるし、実際使われている objectだったらinstanceof使えばいい それで使いものにならないと言ってたら単なるイチャモン付けてるだけ はっきり言って、ちゃんとコード書いてたら型判定なんて必要ない事に気づけよ Booleanクラスが判定出来ないから困っちゃう?ちゃんちゃらおかしいなw >だからundefinedになるからエラーになるって言ってんじゃん その場ですぐエラーになるとは限らない グローバル変数を使ったつもりで全く別のタイミングで問題が出るかもしれない >せめて"use strict"での話しをしろよ してるじゃん。use strictでも予約語にはならないし、古いコード読むときに謎のundefined判定に対する知識が必要 その書き方さえ何パターンもあり、少なくとも美しくはない >使い道はある 使い道があるかどうかじゃなくて、きもいかどうかのお話をしてる もっと使い勝手の良くて、Object.prototype.toStringとか不自然なことしなくてすめばいいのに 擬似的なオーバーロードみたいに使い道はあるのに、型よってころころ判定法を変える言語なんてそうないよ 古いコードでもundefinedに代入するなら代入するなりの理由が無いとやらんと思うぞ そんなコードはそもそも要注意コードだと思うの 全体的には ID:jqPQ5aJG に同意 >>48 > var undefined = 1; これは本当に何とかして欲しい スコープチェーン上で汚染されるのは ES5 仕様では回避しようがない 現状ではtypeof 演算子なり void 演算子を利用するしか選択肢がないわけだが、ES6 で Keywords に入れてもらえないものかね… typeof 演算子の極悪さは Null 型、Object 型の判定にあると思う typeof null === 'object'; // true typeof new Function === 'function'; // true typeof ActiveXObject('Excel.Sheet') === 'unknown'; // true これらは全て ES5 に準拠しているわけだが、全く信じられない挙動だ Null 型の判定は === で可能だからまだマシだが、Object 型の判定に Object() を利用しなくちゃならんのが面倒くさい "type" の名を関する演算子なのに「型」以外の文字列が返すなと問い詰めたい > var undefined = 1; そんな事するわけ無いだろ、誰も困ってねーよ >>55 なぜtypeofを使うかをちゃんと考えれば困ることはない お前プログラム組んだこと無いだろ >>56 「する」「しない」の問題じゃない 良いブログラムならそれ以前に「出来ない」 >>57 君は仕様を読んで型の厳密判定をする方法について考えたことがなさそうだな Object 型に限定した判定法が必要になるケースもある ES の Native method がそういう設計だし、それに似せると必然的に型判定を厳密にするようになる >>58 出来ないから何? やらないものを出来る出来ないなんてどうでもいいし気にもならない 当然キモいなんて全く思わない >>59 > Object 型に限定した判定法が必要になるケースもある 取り合えず例をあげてよ >>60 ローカル変数名にundefinedを使ったコードを読むときに仕様を知らないといけない var undefined; とすると、上のスコープと無関係にundefinedを未定義にできる 古いブラウザへの対応も含めてこれを利用したコードが残っている だから、書き換え可能だった頃の対策コードを含めて、害しかない仕様を詳細に理解せざるを得ない お前が熟知してても、勉強途中の理解がたりない人に優しい仕様ではないね。エラーにする言語なら間違えようがないところ var undefined; については他の定数と比較すれば違いがよくわかる (function () { var true = 1; // SyntaxError: Unexpected token true var false = 1; // SyntaxError: Unexpected token false var null = 1; // SyntaxError: Unexpected token null var undefined = 1; }()); true, false, null で変数宣言が出来るケースを考えてみるといい ちなみに、null が書き換えられた場合は undefined の比でなく面倒になる null は typeof 演算子の仕様バグがあるから固定値を取り出すには必ず、null を返すが決まっている関数or演算子を使うしかない undefined と違って null には void 演算子のような便利な機能は用意されていないのでスコープチェーン上で var null = /./.exec(''); を宣言するぐらいか prototypeのおいしい使い方ってないかな 継承とか考えずにデコレータやアダプタとしてラップする方が便利かも >>61 それを利用してるんなら、その謎物体をundefinedとして扱って欲しいのでは? >>60 ・{hoge: true, foo: false} のように Object 型でオプションを指定したい場合 ・配列のようなオブジェクト(NodeList等)を判定したい場合 >>64 var undefined; を宣言した場合、ES5 で書き換え不可能になった window.undefined をスコープチェーン上で参照不可能になり、書き換え可能なローカル変数として扱われる 書き換え不可能だった定数が書き換え可能な変数に置き換わるのは良いコードとはいえない >>66 もちろん悪いコードだと思う でも敢えてそんな記述をする以上は、そいつをundefinedとして扱えってコードなのだろう そんなコードを意識してわざわざ変な判定をするのは却っておかしなことになるんじゃ?と言いたい >>67 それは確かにそうだな もっと他によい方法があると思う - written: true の時だけ defineProperty を使う - typeof undefined !== 'undefined' の時だけ this.undefined = void 0; - undefined を使わず、typeof 演算子を使う 自分は>>61 ではないので>>61 の回答待ち これから書くときはほとんど気にする必要はない 不便なのは、初心者が人のコードを読むとき ・undefinedがキーワードでないこと ・過去にグローバルオブジェクトが書き換え可能だったこと ・「未定義値であることを保証する」というパターン(イディオム)数種類 を知らないと、そのパターンを見た時にすぐには理解できなくて手が止まってしまう 当然調べてundefinedの仕様を学べばいいんだけど、undefinedが最初から予約語ならそもそもこんなこと考える必要も、知る必要もなかったのにね、ということ 実際、jQueryとかでもほんの最近まで (function(window,undefined){ 中身 })(window) としてundefinedを上書きしてたし、プラグインとかではまだこの書き方が残ってるやつはかなりある >>69 > これから書くときはほとんど気にする必要はない IE7 はまだサポート期間が残っているので「気にする必要はない」は語弊があるのでは? >>65 > ・{hoge: true, foo: false} のように Object 型でオプションを指定したい場合 直感的に思いついた通りに実装すればいいだろ function test(hoge, foo) { 'use strict'; if (typeof hoge === 'boolean') { console.log('hoge is', hoge); } else if (typeof hoge === 'object') { if (hoge.hasOwnProperty('hoge') && typeof hoge.hoge === 'boolean') { console.log('hoge is', hoge.hoge); } if (hoge.hasOwnProperty('foo') && typeof hoge.foo === 'boolean') { console.log('foo is', hoge.foo); } } } test(true, false); test({hoge: true, foo: false}); test({hoge: 2}); test({hage: 2}); > ・配列のようなオブジェクト(NodeList等)を判定したい場合 「ような」なんだから if (hoge.length > 0) { // 配列の「ような」オブジェクト } で問題ないだろ >>72 それは Object 型の一部しか判定できてない >>73 変なコーディングをしてる訳でもなく目的は達しているんで問題無い >>74 特定の Object 型に制限する理由は全くない それから Null 型が考慮されてない 配列も型判定がないからプロパティアクセス演算子でTypeErrorになる場合がある ECMAScript でコードを書いた経験が少ないとしか思えないレベルだ >>75 null(undefined)チェックを忘れた… function test(hoge, foo) { 'use strict'; if (!hoge) return; if (typeof hoge === 'boolean') { console.log('hoge is', hoge); } else if (typeof hoge === 'object') { if (hoge.hasOwnProperty('hoge') && typeof hoge.hoge === 'boolean') { console.log('hoge is', hoge.hoge); } if (hoge.hasOwnProperty('foo') && typeof hoge.foo === 'boolean') { console.log('foo is', hoge.foo); } } } test(true, false); test({hoge: true, foo: false}); test({hoge: 2}); test({hage: 2}); test(null); test(undefined); test([]); test({hoge:[]}); 単にnullチェック抜けてるって言えば済む問題を○型が考慮されてないとか お前の方が素人丸出しだ >>75 こっちもだった if (hoge && hoge.length > 0) { console.log('配列の「ような」オブジェクト', hoge[0]); } ↓これらで問題無し var hoge = null; var hoge = undefined; var hoge = []; var hoge = {}; var hoge = {hoge:1}; var hoge = 1; var hoge = "a"; >>65 はそもそも何を持って配列のようなオブジェクトといいたいのだろう さすがに{length:10}を配列のようなものとは呼びたくないけど >>76 これそもそも第2引数は一度も使ってないけど、何のためにあんの? あと、 if (!hoge) return; 追加したら test(false,false); の時の挙動変わってんじゃん >>78 いや{length:10}de配列ライクと言えると思われる var hoge = {length: 10}; for (var i = 0; i < hoge.length; ++i) { console.log(hoge[i]); } で全部undefinedが出力されるけど、それは普通の配列でも有り得る事だし var hogeArray = Array.prototype.slice.call(hoge); で配列に変換も出来る >>79 直した…スマソ function test(hoge, foo) { 'use strict'; if (typeof hoge === 'boolean') { console.log('hoge is', hoge); } else if (hoge && typeof hoge === 'object') { if (hoge.hasOwnProperty('hoge') && typeof hoge.hoge === 'boolean') { console.log('hoge is', hoge.hoge); } if (hoge.hasOwnProperty('foo') && typeof hoge.foo === 'boolean') { console.log('foo is', hoge.foo); } } } >>80 JavaScript難しいなぁ Array.prototype.slice.call(hoge); ってするときに hoge = {length:4.5} => 4コ hoge = {length:Infinity} => 0コ hoge = {length:99999999999 } => フリーズ hoge = {length:-0.1} => 0コ hoge = {length:-1} => フリーズ hoge = {length:NaN} => 0コ hoge = {length:true} => 1コ うーむ・・・ でかいのはまだしも、負数を渡すとフリーズするのは内部で何をしているんだろう >>82 sliceがマイナスの値は最後から処理するからな気がする lengthがマイナスなのは配列とは言えないから やっぱり if (hoge && hoge.length > 0) { var hogeArray = Array.prototype.slice.call(hoge); } ってのは必要だね >>83 必要かどうかは仕様による。 >>83 のコードが必要な理由は、lengthにマイナスが入ることが プログラムの仕様的にありえるから、必要なのだろう? lengthにマイナスが入った時どうするか? 例外を出すか、永遠と処理するか、hogeArrayをundefinedにするか。 それは仕様で決めること。 そのコードはhoge.lengthがマイナスの場合、hogeArrayは undefinedになるという仕様のコード。 それの仕様でいいのかどうかを考える必要がある。 >>76 > 単にnullチェック抜けてるって言えば済む問題を○型が考慮されてないとか > お前の方が素人丸出しだ そのコードは typeof 演算子の "Object (native and does not implement [[Call]])" しか対応できてないだろう? http://es5.github.io/#x11.4.3 前方互換性をふまえれば、ES6 でも正しく判定出来ることが望ましい http://people.mozilla.org/ ~jorendorff/es6-draft.html#sec-typeof-operator Null 型を誤検知するだけなら「Object 型の一部」とはいわない あなたは ECMAScript 仕様書をまともに読んだことがないだろう? ES 仕様に言及している意見に反論するなら仕様書ぐらい読んで欲しい >>78 > >>65 はそもそも何を持って配列のようなオブジェクトといいたいのだろう わかりやすくいうならば、 Array.prototype.forEach と同様の判定といえるかな Array.prototype.forEach では ToObject, ToInt32 で型変換しているわけだが、型変換せずに TypeError を返したい状況もあるだろう http://es5.github.io/#x15.4.4.18 >>85 > そのコードは typeof 演算子の "Object (native and does not implement [[Call]])" しか対応できてないだろう? それで事足りてるという事は仕様的に問題ないという事だ 対応できてない事で実用的に問題があるコード例を挙げて説明してくれ そもそもJavaScriptは var obj0 = {hoge:true, foo:false}; var obj1 = {foo:false, bar:1, hoge:true}; function Hoge() {this.hoge = true; this.foo = false;} var obj2 = new Hoge(); のどれを渡されても同じように機能する事が期待されている !obj(nullとundefinedのチェック)とプロパティーの存在チェック(と最終的に'number'などの型チェック)以外に必要だとは思えない 実際、>>72 が直感的にコードを書いて多数間違えたぐらいだからなあ rypeof演算子に関しては良い仕様とは言い難い なにがArrayLikeかは難しいよ。どういう目的で区別するかで変わると思う。なぜなら何を配列と見立てられるかは用途によって変わるから。 例えば配列に変換したいという場合なら、ES6のArray.fromを参考にすると、 lengthを持っているか(オブジェクトでなくともラッパーのプロトタイプにあればいい)、イテラブルならOK。 これが広義のArrayLikeだろう。 またはArray.prototype.concatで、引数をSpreadすべきかどうかなら、実は配列かどうかというチェックだと問題がある。 だからES6からは@@isConcatSpreadableのチェックに変わった。 要するに「一般的なArrayLikeの判定」を定義するのは無理というか、しても役に立つものにならないと思う。 >>88 > ES6のArray.fromを参考にすると、lengthを持っているか(オブジェクトでなくともラッパーのプロトタイプにあればいい)、イテラブルならOK。 Array.from は配列に変換する、つまり Object 型に変換するから変換元が Object 型であることを求めないだけな気がする ierator を除くと Array.from は ToObject, ToLength(Int32への変換)をしている http://people.mozilla.org/ ~jorendorff/es6-draft.html#sec-array.from 変換後のオブジェクトが ArrayLike と考えられるので ArrayLike は「Object 型」「Int32のlengthプロパティを持つ」になる Array.from の挙動は>>85 で説明されている Array.prototype.forEach の挙動と一致する Array.prototype 系メソッドを一通り読めばわかると思うけど、全てそういう挙動になってるよ 対象を isArrayLike で判定して例外を返すか、ArrayLike に変換するか、は意見が別れる(ポリシーに依る)だろうけどね ES6 の挙動に合わせるなら変換する方になる ToObjectがかかっているのは、null/undefinedはじきや、Getやらもろもろの処理がObjectであることを期待しているためだからであって、処理の本質とはあまり関係ないけどね。 あとToLengthはInt32でなく2^53-1までの整数。 長さを拡張すべきという問題が出て、Arrayに関しては互換性問題で見送られたけど、型付配列は長さ2^53-1までになったから、ここに関しても絶対基準はないと思う。 別にこの範囲でなくともエラーになるわけではなくて、範囲に収まるように強制されるだけだし。 >>91 なるほど ES6 の Array.prototype.forEach の length も 2^53-1 に拡張されてるんだな http://people.mozilla.org/ ~jorendorff/es6-draft.html#sec-array.prototype.foreach 今後、更に拡張される可能性を考えると、length に関しては Number.isInteger の判定ぐらいでいいのかもしれないな http://people.mozilla.org/ ~jorendorff/es6-draft.html#sec-number.isinteger 別に整数かどうかの判定は要らないだろう。 「"5"」だったら「5」、「true」だったら「1」になるのがJS流だし。 整数の長さが欲しければ「len = obj.length|0」とするのがJS流。 try catchって頻繁に呼び出す関数では最適化できなくて遅くなるから使っちゃいけないのか? 知らなかった…Chromeのプロファイラに出ていた警告を見て初めて知った >>94 ループで、独自につくったルーチンなどを頻繁にそれつかって回すと激遅になる ので、なるべく、どこかで検証用の別ルーチンで対処させるようにしてる。 関数全体を覆わなければ問題ない。 一番ベストな使い方は関数呼び出しの部分だけに使用する。 try{ func() } そうでなくても全体で使用しなければ、tryの掛かっていない部分はfor文等一定のブロックごとに最適化が働く。 >>94 try catchの使い方を間違えてるんでしょ。 try catchを正しく使うということは try catchを使わないことを意味するw 何を行っているかわからないと思うが、 基本的に、windowのerrorイベントを使えばいいんだよ。 errorイベントは、誰もcatchしない時に呼ばれる所。 ここでまとめて処理すればいいし、普通はここで処理するもの。 例外的に途中でcatchしなくちゃいけない時だけcatchをする。 だからtry catchを正しく使う = try catchを使わないということになる。 逆に間違った使い方をしていると、catchしてalert()とかreturn falseとかするから、 間違った使い方 = try catchが多くなる。 >>94 try-catch は例外を捕捉しなければエラー処理出来ない場合に使うもの 例外が発生する条件は確定しているのだから、 try-catch を使わなくても対応出来る場合が大半を占める try-catch を使うのは new ActiveXObject() で対応する引数に応じて処理を分ける等の例外的なケースに限られる netbeansを使ってるんだけど最初にテンプレが出ますよね?あれを編集する方法ないですか? 現行スレ + JavaScript の質問用スレッド vol.123 + [転載禁止](c)2ch.net http://peace.2ch.net/test/read.cgi/hp/1423915644/ >>99 [ツール]-[テンプレート] [エディタで開く] 『関数型プログラミングに目覚めた! IQ145の女子高校生の先輩から受けた特訓5日間』 http://www.amazon.co.jp/dp/4798043761/ せっかくだからJavaScriptで関数型プログラミングを学んでみるのも面白いかもしれないな。 >>105 Qiitaアカバンされたポエマー、毛の壁先生じゃんw JavaScriptが20周年。開発者のBrendan Eich氏が過去と未来についてのスライドを公開 ttp://www.publickey1.jp/blog/15/javascript20brendan_eich.html >>107 たった10日で書いたのか。 通りでクソなはずだ。 言語としてはかなりシンプルだったからな。 LexとYacc使っただろうし、スタックマシンな バイトコードインタープリタはSchemeのインタープリタを Cで書いたことがあれば難しくない。 コードを10日で書いたからクソというよりは、 書く前に言語仕様をきちんと練らなかったからクソなんだろう。 10日で書いたにしては良くできてるけど、もともとVBAみたいなものなのに、 後からいろいろ理屈を考えて素晴らしいものみたいに言いくるめようと したのがいけなかったんじゃないの。 アプリに付属させるマクロだと思えば、納得の仕様だと思うけど。 元々そういうものなんだし。 >>109 すまないが、ゴミをシンプルって言う風潮やめてくれるか? ClojureScript使い始めたらJSのクソさが 気にならなくなってきた。 誰でも10日で出来る作業なら クソだろうさw 10日でとても出来ないような作業を 10日で作ったのならば、それは優秀ってことだよ。 優秀な人が作ったのだから、とても良く出来ている。 >>113 ←こういうの権威主義の馬鹿っていうんだよねぇ。日本人に実に多い。 jsスレでdisるのもアレだけど 権威主義以外の何物でもない 10日で作ったのは凄いかもしれんが別に洗練されてもないしシンプルでもない 初期のjsって文字列演算、暗黙変換とか無駄に長いfunctionとか、 中途半端にvbやC++の真似もしてて、バージョン違いの挙動もあって普通にクソ 初期のを優秀とか言う奴はES6使わないで欲しい 本人はサブセット言語嫌いとかlisp嫌いとか好き勝手言ってるみたいだけど 素直にパクリ元のselfのサブセットを素直に実装すりゃよかったと思うわ だいたい名前からしてクソだよ。 全然関係無いJavaパクってるんだし。 >>116 お前こそ権威主義じゃねーかw オリジナルは偉いんだ?w >>118 日本語読めないならそう言ってくれよな 噛み砕いて話してやるからさ >>119 じゃあどこが権威主義なのか 噛み砕いて説明してください。 その前に前提として権威主義とは何かを書いておきますね。 http://ja.wikipedia.org/wiki/%E6%A8%A9%E5%A8%81%E4%B8%BB%E7%BE%A9 > 権威主義(けんいしゅぎ)とは、権威に服従するという個人や社会組織の姿勢、思想、体制である[1][2]。権威主義の反対は個人主義や民主主義である。 > 政治学上の用法では、権威主義体制とは非民主的な体制の総称であり、通常は独裁、 > 専制、全体主義などを含むが、権威主義体制を民主主義体制と全体主義体制の中間とする立場もある[5][6]。 http://d.hatena.ne.jp/keyword/%B8%A2%B0%D2%BC%E7%B5%C1 > 権威(人を服従、強制させる力)に価値をおき、それに対して自己卑下や盲目的服従をする態度のこと。 > また逆に人にそれを要求する態度のこと。心理学的には、権威や伝統、社会的に価値のあると > されているものを無批判に承認し、これに服従、依存し、融通が利かないパーソナリティを指す。 オリジナルがえらいのではなくて パクリ損ないでオリジナルより劣化してるのがクソ、 っていう単純な話だと思うのだが…… >>120 10日で作業したというだけで優秀として 優秀な人、その人が作ったからスバラシイ 全然中身に言及してねえじゃんw どこに権威主義以外の要素があるんだよw >>121 まさかここまで使われるとは思ってなかったんだろうな >>116 ユーザが100万人ほどの言語を10日で作ってから言え 流石に初期JSの規模で大変とか言ってるのは インタプリタの作り方もわからない初心者だけだよな? クソ言語でも普及したPHPと違って言語そのものの需要で使われたわけでもなし JSが普及したのはウェブブラウザが先進的だったから そもそも本人も公開してるのに何マンセーしてんだかw >>127 オレもそう思うんだけどねえ。 Schemeのインタープリタ書いたことがあればさまえ難しくはない。 学部レベルのインタプリタよりエロ動画サイト作る方が難しい JavaScriptライブラリのスレにも書いたのですが,過疎っていたのでこちらで質問させてください openlayers3についてです http://openlayers.org/en/v3.5.0/examples/kml-timezones.html をそのままコピーして ローカルで実行したのですが,サンプルのようにTimezonesが表示されません(地図は表示されます) kmlファイルはhttps://github.com/openlayers/ol3 にあるdataフォルダをhtmlと同じ階層に設置しました 他のkmlファイルを読み込むサンプルも同様に動かないのですが何が原因でしょうか >>132 だからあなたには答えられないんですね。なるほど。 var vector = new ol.layer.Vector({ source: new ol.source.Vector({ url: 'timezones.kml',//url: 'data/kml/timezones.kml', >>131 普通に動く。timezones.kmlをhtmlと同階層に置いて>>135 を書き換えても動く。 >>135 >>136 ありがとうございます IE,Opera,Chromeだと動かないのですが,firefoxだとサンプル通り動きました これってコードにブラウザ依存の部分があるのでしょうか? それともブラウザの設定の問題でしょうか? ローカルテストはサーバ立ててやるものだと思うが、fileスキームで実行してるのか >>138 >>139 サーバたててやったらどのブラウザでも動きました ありがとうございました 最近やたらめったらモジュールに切り分けてたら共通部分の重複が酷いことになってた 現在のスコープ内にimport,requireできれば便利なんだが 現時点でもやはりES3で書くべきですか? ES5出てからもう何年も経ってるしObject.create()とか配列まわりの関数とか色々追加されてるのに使えないのが歯がゆいです。 ネット見てると結構ES5の機能使ってる人が多いですが、そういう方々はIE8とか切り捨ててるんですかね? >>142 サポートサイクルを見たらどうでしょう? 2016年1月まではIE8対応は切れません。 IE8 でもpolyfillで何とかなる場面が多いとは思いますが >>142 lodash使ってる。なんとIE6以上から対応してる。 実装不可能なものを除いて、ES5で提供されている関数が提供されてる。 Object.create相当のメソッドもある。 https://lodash.com/docs#create どうしてもES5だけでやりたいってわけじゃなく ES5で提供された便利な関数を使いたいならlodashオススメ。 lodashにはES5よりも多くの機能が追加されてる。 >>143 ありがとうございます。 ぐぐってみたら2016年1月以降は最新版のIEしかサポートされないんですね。 こういうのを境界にして考えるのですね。勉強になりました。 polyfillというのはes-shimsとかのことですよね?Object.createに対応してないので選択肢から外れました。 >>145 ありがとうございます。今回は素のJSでやりたかったのでlodashは使えません>< でももうすぐES6が出るしキリが無いですね ブラウザ対応状況とか考えるの諦めてlodashとかunderscoreとかそういうのに完全依存する方が正しいのかも >>146-147 Object.create はES3の範囲内で完全実装は出来ない為、制限付きを理解した上で polyfill を書く必要がある lodash は forEach 等で ES5 互換でないコードが見受けられるので ES 標準を目指すのであればお勧めしない コードを読む限りでは 仕様に忠実なライブラリではなく、独自の世界を構築するタイプのようだから underscoreって可読性低下しない? _から始まるってのがそもそも論外なんだけど… 知らない人間が見たら何だコリャ?ふざけてんのか? これを考えた奴は保守性を考慮しないオナニー馬鹿なのか?って思うだろ。 >>149 ま、普通使わない。 オナニーって言えばその通り。少なくとも個人的に使うのだったら文句言う アレはないが、プロジェクトなんかでこんなもの使ってる奴いたら、排除する。 >>149 > 知らない人間が見たら何だコリャ?ふざけてんのか? それを言い始めたら、$.hogeってなんだ?ってことにもなる。 >>150 > ま、普通使わない。 以外と使われてるよ? http://www.infoq.com/jp/news/2015/04/lodash-utility-library > JavaScriptユーティリティライブラリのlodashがバージョン3.5に達して,npmパッケージリポジトリの中で > 最も多く参照されるライブラリになった。もはや代用品などではなく,信頼できる選択肢のひとつだ。 http://matsukaz.hatenablog.com/entry/2014/04/09/082410 に上げられてるようなよく使う機能は、 オレオレ実装されるより、既知のライブラリのメソッド使って欲しい。 javascript使いってエンジニアとして未成熟なのか文系が多いのか、 保守性を考慮しないのばっかりだよな。 多言語では保守性において禁忌とされている事を平気でやる 先人が築きあげたバグを排除するコツのようなものをを完全に無視してる たぶん将来はjavascriptの仕様が整理されて、 jQueryとかunderscoreみたいな非直観的で腐ったキーワードを使うライブラリは完全非推奨になる。 >>152 だってJataScriptが使いにくいクソ言語じゃん。 細かいこと気にしてられないって、クソだから。 >>152 こういう関数の部分の保守性とかどうでもいいよw 単純に自分実装のライブラリに入れ替えれば済む話なんだから。 それより問題なのはフレームワークだ。 馬鹿が使うとフレームワークにガッチリ組み込まれて 別のものに変えるのがすごく大変になる。 >>151 > > ま、普通使わない。 > 以外と使われてるよ? だよな。Node関連では一番使われているライブラリだったはず。 何処かにデータが有ったはずなんだが。 好き嫌いは個人の好みとして、一番使われているという 事実を知らないとしたら、モグリだろうw あったあった。この記事だ。 lodash, あなたが既に使っているJavaScriptライブラリ http://www.infoq.com/jp/news/2015/04/lodash-utility-library JavaScriptユーティリティライブラリのlodashがバージョン3.5に達して, npmパッケージリポジトリの中で最も多く参照されるライブラリになった。 もはや代用品などではなく,信頼できる選択肢のひとつだ。 何の根拠もない「使われてない」は無視していいよ。 だって、本人が無知だから、使われていることを「知らない」という 状態でも、自分の知ってる小さな経験だけから 使われてないって発言するだろうからさw そんなことよりもNode.jsのREPLでアンダースコアが使えないのはどうすればいいの? REPL単体で使うぶんには別の名前を使っても気にならないけど、.loadで読み込むファイルでアンダースコアが 使われていた場合は、ファイルを書き換えなければならず、かなり気持ちが悪い こんな定番のライブラリで、Node.jsのことを考慮していない名前をデフォルトにするとも思えないから、 何か解決策はあると思うんだけど… >>149 perlのデフォルト演算子($_)の名残だと思ってた >>159 グローバル変数とローカル変数の違いわかってる? REPLで使うのはグローバル変数の_。 ローカル変数の_(lodash)が名前かぶっても 何の問題もないんだが。 名前かぶってわかりづらいというのなら、 var i だってずいぶん被ってるはずなんだが。 >>160 いやー、普通、_で思い出すのは、 C言語などで広く使われてる多言語の仕組みである GetTextの_関数でしょw あれだって、_で始まる関数なわけだけど、 何だこりゃの前に、普通GetText思い出すよね? >>149 は無知なんじゃないかって思うだけなんだが。 >>162 _で始まるって言い方はおかしかったな。 C言語系の_は名前が続くから識別に問題ないが、_だけというのがクソだって話 これを初めて拝んだとき、_だけを変数名にするなんて一体このバカはどんな教育を受けているんだと思ったわ。 >>163 うん。それでgettextは、_ だけの 関数名なんだが、恥の上塗りしてどうするの? >>161 流石にそれくらいは分かってるけど、UnderscoreやLodashは普通グローバルに読み込むものじゃないの? まさか関数ごとにrequireを書くわけでもあるまいし、少なくともvar iとは次元が違うものだと分かると思うんだけど… lodash使うアプリでグローバルなんて聞いたことがない。 普通nodeでライブラリを使うときは、 ローカル変数に、略 いわんでもわかるだろ? 知ってるならなw 訂正 lodash使うアプリでグローバルなんて聞いたことがない。 node使うアプリでグローバル変数なんて聞いたことがない。 CakePHPなんかの__()ならともかく、underscore.jsでGetTextの方の_を、 どうすれば連想できるのかわからない _を変数名にするのはゴミだってのは100人に聞いて99人が納得する話。 ほんとjQueryといい、javascriptのライブラリ作ってる奴は基地外だわ。 >> 166,167 何が言いたいのか分からんのだけど、ファイルの頭で var _ = require('lodash'); // またはunderscore とするのは十分、一般的な使い方じゃないか? 適当に検索したサンプルコードでも、ファイルの頭でrequireをしているものがほとんどだし >>170 デフォルトに近い機能を誰もタイプしたくないから >>171 はい、だからファイルの頭で var _ = require('lodash'); // またはunderscore とローカル変数に代入してるって言ってるわけですが。 >>173 それで>>159 に戻るんだが、そのファイルをREPLから.loadで読み込むと名前が衝突して困るという話なんだが 何かおかしいこと言ってるかな? >>174 それは作り方が悪いだけだろう。 自分で作ったものを自分でロードして 問題が起きたって騒いでいるだけ。 ヒント 普通はREPLでライブラリを読み込むときはrequireを使う。 >>175 だから、どのように作り方が悪いのかを>>159 で聞いているわけ >>176 何故qiitaが出てくるの? なんか話が通じない人多すぎ… ttp://stackoverflow.com/questions/5691901/using-the-underscore-module-with-node-js >>172 underscoreというものの存在を知ってる人間じゃないと、おふざけか本気なのか理解不能 知らない人でも直観的にわかるようにするべき。 _.なんていかにも意味ありげに書かれてたら、知らない人間はjavascriptに新しい構文でも出来たのかと勘違いする。 >>177 それは別な名前を使うってことじゃないの? それなら>>159 で書いたよ >>178 > だから、どのように作り方が悪いのかを>>159 で聞いているわけ 簡単な話。 .loadでAというファイルとBというファイルの 二つを読み込んだ時を考えればいい。 同じ変数を使っていれば、混乱が起きる。 だから.loadなんかを使っては駄目だ。 REPLはAというファイルの前に 別のファイルを読み込んでいると考えればいい。 nodeの標準に合わせてrequireで読み込め。 .loadは簡易なツールにすぎない。 >>180 _.なんていかにも意味ありげに書かれてたら、知らない人間は 普通調べる >>182 > .loadでAというファイルとBというファイルの > 二つを読み込んだ時を考えればいい。 これに関しては自分の場合は混乱が起きたことは無いな REPLで必要になるのは常に新しくロードされたものだから > nodeの標準に合わせてrequireで読み込め。 .> loadは簡易なツールにすぎない。 その簡易なツールとしての使い方を聞いたつもりだが、まぁうまい方法は無いってことで 答えてくれたことは感謝するよ、ありがとう >>183-184 こんな記述を許すなんて、webプログラマはどうかしてるわ C++等の堅牢な言語が理解できないからスクリプトに逃げたってのもあるのかねぇ javascriptって手作業感のあるかなりアナログな言語だよな。 コンパイルすれば型間違いやスペルミスを全部チェックしてくれるC++の方が楽だわ。 デフォルトで存在しなければならないような機能の構文は 可能な限り軽くしたい、というだけの話なのだが、 まあ、キチガイみたいだし、相手にする必要もなさそう。 >>187 >コンパイルすれば型間違いやスペルミスを全部チェックしてくれるC++の方が楽だわ。 静的検査なのに型安全じゃないクソみたいな型システム自慢されても…… >>186 $と_を選択したjQueryとundersocreの作者は天才だと思うぞ >C++等の堅牢な言語が理解できないからスクリプトに逃げたってのもあるのかねぇ ここ笑うところでOK? スクリプト言語なら_とかもありだと思うよ 直感的に理解不能なのはむしろC言語のテクニカルすぎるポインタ操作とか、処理系依存処理 _なんて使わないで堂々と大文字でUNDERSCORE.でいいのに 面倒くさいから_にしたなんていっても、 UNDERSCOREのようなループ処理は他の頻出するキーワードに比べてそう頻繁に使うもんじゃないから、 UNDERSCOREと打ち込むくらい苦にはならない むしろ見ただけでUNDERSCOREとわかるメリットのほうが大きい。 >>190 > $と_を選択したjQueryとundersocreの作者は天才だと思うぞ 天才じゃなくてズルいと思ったな。 そんな特等席を取るなんてw でもjQueryとlodashなら許せるよ。 DOM操作目的が多いJavaScriptで標準よりも 優れたライブラリに仕上げたjQueryは高く評価できるし。 JavaScriptという言語自体に足りない(そして他の言語にはある) 基本的な機能を備えたlodashも一文字名前空間を与える価値はある。 これ以外に一文字を与える価値が有るものなんてまず無いだろう。 (あえて言うのなら多言語のためのgettextだろうね) http://ja.wikipedia.org/wiki/Gettext > まず、gettextが利用されるようソースコードの修正を行なう。これはほとんどのプログラミング言語において、 > ソースコード中の文字列がまずgettext関数へ渡されるよう、文字列をラップしていく作業となる。 > 読みやすさやキータイプの手間を省くため gettextには通常 _ のエイリアスが付けられる。C言語では、 > > printf("My name is %s.\n", my_name); > > を以下のように変更する: > > printf(_("My name is %s.\n"), my_name); >>198 開発効率と可読性が悪いだろw なんで多く出てくるものに、 そんなに長い情報量を与えないといけないんだ? 圧縮の基本だぞ。 多く使うものに短いビットを割り当てるのは。 >>200 そんなに画面を占領するほど出てこないだろ。 圧縮率が気になる人は var, a, b, c; でも使えばいい _ が気にならないなら Java でも PHP でも同じように使えばいい それが誰が見てもコードの意図を理解できるものであると思うのならな > それが誰が見てもコードの意図を理解できるものであると思うのならな ん? 馬鹿が見てもわかるコードなんてあると思うのか? 何の知識も持たない奴が、forとか見て、繰り返しだな。なんてわかると思うのか? 知識があるプログラマが見てわかれば十分だろw >>203 ←こういう極論振りかざす馬鹿はプロジェクトから最初に外したいねぇ♪ そもそもjQueryの根幹を成していたcssQuery作者はJSに習熟していたから$なんて使わなかったが、 当時JS初心者が浅い知識で無茶苦茶に作ったprototypejsが流行っていてユーザーがそこで$にすっかり慣れてしまっていたから、彼らを取り込もうと図った時に敢えて$を使った。 jQueryリリース日から知っているのって、俺以外で何人いるかな、まあ、ライバル心が凄くて、露骨に他のライブラリーを威圧する画像を貼っていて苦笑ものだった。 実際、query api がなかった当時において、飛び抜けた存在だった。 誰も知らないだろうが、既に消した10年ほど前のブログで俺が日本で最初にjQueryにお墨付きを出したので、変な責任感があって、今や粗大ゴミと化したjQueryを徹底的に駆除しなきゃならないと思っている。 >>205 今じゃすっかり死に絶えたね prototype.jsは 未だに$使ってる奴は、PHPでもやってろって思うね。 どうでもいいが、underscorejsはグローバルで名前がかち合わないよう自動処理してるだろ。だから_にこだわりも何もないよ、あれは。あの作者はさすがだなと思う。 jQueryでみんなが慣れてしまったメソッドチェーンはOOPであるJSならではの妥協の産物であって決して素敵な何かではない。 > jQueryでみんなが慣れてしまったメソッドチェーンはOOPであるJSならではの妥協の産物であって決して素敵な何かではない。 メソッドチェーン便利じゃん メソッドチェーンを否定するなら、代わりに何を推すのだろうか >>206 > jQueryリリース日から知っているのって、俺以外で何人いるかな、まあ、ライバル心が凄くて、露骨に他のライブラリーを威圧する画像を貼っていて苦笑ものだった。 知ってるも何も、Internet Archiveに残ってるよ。 その画像ってどれのこと? https://web.archive.org/web/20060203025710/http ://jquery.com/ >>209 jQueryでみんなが慣れてしまったメソッドチェーンは jQueryができるより前から知っていたが、はて? そもそも、$ や _ の話にメソッドチェーンは関係なかろう vue.js でelを指定しない時にHTMLを生成できるって書いてある記事を見かけたのだけど、どうやればいいんだ? まあ名前付けが傲慢な感じはあるね prototypeとかqueryとかnodeとかbootstrapとか、 一般的なコンピュータ用語になんでもjs付ければ許されるのかと ここ5年くらい、Web屋の無知と傲慢が招いた名前空間の汚染が激しいように思う >>219 > ここ5年くらい、Web屋の無知と傲慢が招いた名前空間の汚染が激しい という無知 >>220 おっWeb屋だ、元気? ところでv8をビルドするときに使う bootstrapスクリプトの機序をどうやって検索したらいいか教えてくれよw >>221 v8のビルド方法で検索すればいいんじゃね? 検索したら、How to Download and Build V8っていうのが見つかったけど。 https://developers.google.com/v8/build?hl=ja >>219 世の中の大半は、おまえより生産的で知識豊富な人たちが開発したと思ってるけどね >>223 そういう話はキッチリソースつけて、話してくれや。 ま、ウェブ屋の大半が馬鹿なのは本当だろう 巨大なページに普通のjquery適用させて重い重い言ってるのよく見るしな 中古のスマホやタブレットでデザイナーに作られたようなjQuery満載の糞ページを表示させると電力不足を引き起こされてバッテリー残量が正確に認識されなくなってOSが緊急終了させられる。 今やスマホどころかタブレットもバッテリー内蔵で交換は困難/不可能だからバッテリーが寿命になっても使い続けられている端末はいくらでもある。 >>226 とにかく書き捨ての糞プロジェクトが増えた こんな流れはGoogleがつくった感じする 誰かのせいにして安心するのは間違ってる それは作った当人らの責任だろ 詐欺業者が横行してて 姉歯的案件だらけだよ 年金記録流出も起こるべくして起きた 関係無いけど久しぶりにJSLint使おうと思ったら随分変わってるのな つーか何で x /= 3; でストップするんだ?わけわからんのだが 他人が作ったコードをメンテすることになってJSDocアノテーションされてたので ドキュメント化しようという話になった 開発時にはがJSDoc Toolkit(https://code.google.com/p/jsdoc-toolkit/ )を使っていたようなのだが それはすでにサポート終了してテンプレートも消えていた それでJSDoc3(https://github.com/jsdoc3/jsdoc )を試しているのだがデフォルトのテンプレートが どうにも満足のいかないものだったので、テンプレートをいくつか探して試した なかには not found のエラーを出すものがあり、そろそろ疑問に感じてきた それで JSDoc を jsdoc -T としてテスト実行してみたところ大量の not found えっ? テストしてないでリリースしてるの? それともこちらの環境の問題? ちなみに Windows 7 環境で同梱のバッチで実行してるのだけれども java 上で動くのだからその辺は一緒のはず? javaランタイムのバージョン? もし Windows 上で JSDoc3 を使っている方がいたら 安定して動作している環境を教えてほしい >>235 $ git clone https://github.com/jsdoc3/jsdoc Initialized empty Git repository in /home/hoge/src/jsdoc/.git/ remote: Counting objects: 16429, done. remote: Total 16429 (delta 0), reused 0 (delta 0), pack-reused 16429 Receiving objects: 100% (16429/16429), 16.16 MiB | 377 KiB/s, done. Resolving deltas: 100% (8177/8177), done. $ cd jsdoc/ $ ./jsdoc -T Running tests... .....(略).... Finished in 4.993 seconds 1163 tests, 2965 assertions, 0 failures .....(略).... Finished in 0.054 seconds 33 tests, 60 assertions, 0 failures ちなみに、 $ java -version openjdk version "1.8.0_45" OpenJDK Runtime Environment (build 1.8.0_45-b13) OpenJDK 64-Bit Server VM (build 25.45-b02, mixed mode) 同じ手順を Windows 上の Git Bash にて行ってみた $ git clone https://github.com/jsdoc3/jsdoc Cloning into 'jsdoc'... remote: Counting objects: 16429, done. remote: Total 16429 (delta 0), reused 0 (delta 0), pack-reused 16429 Receiving objects: 100% (16429/16429), 16.16 MiB | 1.17 MiB/s, done. Resolving deltas: 100% (8177/8177), done. Checking connectivity... done. Checking out files: 100% (620/620), done. $ cd jsdoc/ $ ./jsdoc -T js: exception from uncaught JavaScript throw: Error: Module "c:/Users/xxxxxx/Documents/GitHub/jsdoc/jsdoc.js" not found. うわーん $ java -version java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b15) Java HotSpot(TM) Client VM (build 25.45-b02, mixed mode) です >>239 Windowsは、jsdoc.cmdを実行するみたいだよ。 ただ、俺には理解不能なエラーが出た。 Javaとか知らんし。 > $ .\jsdoc.cmd -T > Running tests... > org.mozilla.javascript.EcmaError: ReferenceError: "self" is not defined. (file:/C:/Temp/jsdoc/node_m > odules/bluebird/js/main/captured_trace.js#464) Macでもやってみた。 3年位使ってたけど、Java入ってないし。JDKのインストール方法をググる所から始めた。 Web開発にMac使ってる人が多いのは、こういうところかもね。 $ ./jsdoc -T Running tests... ....(略)... Finished in 3.486 seconds 1163 tests, 2965 assertions, 0 failures ....(略)... Finished in 0.024 seconds 33 tests, 60 assertions, 0 failures ttp://www.bluefoun.pos.to/games/howto/htimg.html ここに出てくる関数gameBodyって意味あんのか・・・? これ書いただけじゃ何も実行できんぞ 迷子なんでここでいいかな? cordova(phonegap)で躓いてるんだけど、専用スレが見当たらない 誘導plz そもそもフレームワークスレがないんだわ 自分で建ててもいいんじゃない webアプリの伝票を表示する画面のHTMLで、テーブルタグでエクセル方眼紙作ってあった 列とか必要以上に多くて無駄にセルの結合してあった 数字の1と文字の1が一致して笑った。 カス言語すぎる。 JSは互換を安易に切れないからな 残りカスのような変な仕様は山ほどある >>249 もしかしてマジでEXCELでデザインしたものを変換してるのかもな explicit宣言で==がsyntaxerrorになったりせんのけ 変数に型がない言語ではどうしても、 == と === 相当の機能が必要になる。 変数に型がない言語では全て同じ。 ID:mqZtRy/B は素直に静的な型宣言を必要とするコンパイル言語を使っとけ 言語としては悪くないが、 将来性として悪い。 BabelなどでES6が使えるようになった今、 CoffeeScriptの役目は終わった。 優位性が無くなったのだから。 CoffeeScriptはES6をつくるための 犠牲になったのだ。 >>259 null == undefinedがありますので >>267 でもこういうクソ仕様はありますね。 2.2.1 - 変換 Luaは文字列と数値を実行時に自動的に変換する。 すべての数学演算は、 文字列に適用されると、一般的な変換ルールに基づいてその文字列を数値に変換しようとする。 ただし、例外があって 2.5.2 - 関係演算子 2.2.1 の変換ルールは等価比較には適用されない。 そのため、"0"==0 は false に評価され、 t[0] と t["0"] は異なったテーブルエントリを示す。 一貫性がない。 NaN !== NaN は他言語でもそうなのかな これだけは直感的でないと感じてしまう >>269 Rubyも同じ http://docs.ruby-lang.org/ja/search/class:Float/version:2.0.0/query:NAN/ > ただし、NaN 同士の比較では常に false を返します。 Pythonでも同様 http://d.hatena.ne.jp/yosshi71jp/20090920/1253415431 > nanは非数(not a number)、infは無限(infinity)。通常、 > この表示になってしまったら、これにどんな演算を行っても、結果はもう変わらない。 PHPでも PHP 型の比較表 http://php.net/manual/ja/types.comparisons.php > この値を、自分自身を含む他の値と比較すると、緩い比較であっても厳しい比較であっても > 結果は FALSE となります (つまり NAN != NAN であり NAN !== NAN であるということです)。 さらにPerlでも http://perldoc.jp/docs/perl/5.6.1/perlop.pod > NaN はどの値に対しても(NaN に対してでさえも) "<", "==", ">", "<=", ">=" の > いずれも成立しないので、これらは全て偽となります。 SQLでも似た仕様がある。 NULL は NULL と等しくない!? http://blog.livedoor.jp/i_am_best/archives/7845603.html >>269 > NaN !== NaN は他言語でもそうなのかな > これだけは直感的でないと感じてしまう 直感的じゃないという意見はわからなくもないが、 他言語でも同じなわけで、それを知らないということは、 君の経験不足ってのがよく分かるねw a = NaN, b = NaN aとbを比較しようとしたときにどういう問題が発生するか考えれば納得出来るだろう >>273 わかりづらいw var a = "a"; var b = "b"; parseInt(a) == parseInt(b) これがtrueだとおかしいだろ? ぐらいのことを言えよ。 は? NaN という状態の意味を考えろよ? 言語でしか考えてなくてコンピュータで処理するってこと微塵も考えてないだろ? >>271 他言語の経験がないのは認めるけど、煽りとかどうでもいいから NaN !== NaN が成立する合理的な理由があるなら教えて欲しい 「他言語でもそうだから」という教科書的な答えでは納得できない >>273-274 その比較はする必要性を全く感じないので、そのコードの目的がわからない null, undefined は等価なのに NaN だけ特別扱いする理由がわからない >>278 nullやundefinedは演算の結果でなるものではない >>278 null や undefined は言語上で特定の意味を与えられた値にすぎない NaN はそれとは全く違う 不正な演算によって生じた結果を表す状態で、これは言語ではなくてコンピュータの仕組みから定義されているもの 「不正な値」だと理解してもらっていい 不正な値なので大小比較自体が成立しないのでその結果も不明となる あとは自分で NaN をググるなり、コンピュータでの数値表現について勉強するなりしてくれ >>279-280 NaN は Number ではない不定値のようなものか 何となくだが、理解した ありがとう しかし大小比較自体が成立しないんだったら 言語側では例外を投げてもいいような気もするが IEEE754で演算上の振る舞いも規定されているのか >>283 "Not a Number" だろう? "Not a Number" からは不定値か固定値かは読み取れないと思うが / {;;;;;;> _八_ :: :| /) ..:::::::::::ヽ ( : | , - ' .. '' {.. :::( 丶 _) | /.... ,.... .. ::: ::: | _/{:::::r‐ ,.::::::::::/ : : } _ イ ::::: {:::::::::}. ... ::: . ´ ^} _... , ィ ... :: .. :: , :::::::::::: .:. . ,' /::: . ´ ゛ :::::: :: ::::::::) ...:::.::. } .. イ:...:: ´ ,..::::::::::::::. ..::::.. :::"゛.. :::: ,' ,.´ ... .:. :: ´(::::::::: ゝ .:::::::ノ ;.. ハ .. ,′ . / {::::::::.. ::: :::: "" :: ...... ⌒ヽ { { /:::. / .... -<:: :::::::(::::::: } レ:::::::::::... { . {ヽ < ::: :: :: :::: { :::::::::::: ヽ {:: .. ___{ ,....:.:.:.:.::ヽ ,. { i:::::::::::: | ヾ:::: ´ ,'.:.:.:.:.:.:.:.:.:. :: .::. ゛"゛ .,′ \ y :.:.:.:: ヾ:: :: :: } .. /: `,´ / . \ ..::.::.::.. ` ::::::ゝ :: ::: ::. / \ ヾ:._.: .. ,:.: − _ン \ ::::: ... .. . "゛ ,..ィ ~ ヽ _ :::: ....:::. ::::::::::_ .ン  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ / ヽ / ヽ / 人 ト、 | / >‐ァ / _\ ! jノ / / / /,=彡'⌒ V ,=ミ \ / / / r==彡tテ丁> ∨ /ヽ | \___, // / __ /`¨´ ヽ.ゞ'′ リ ノ / _ノ {' . ′ ⌒≫t示 / < / >ヘヽゞイ ∨ ヽ / ,, ’ ヽ丿 ∨ ! / _ .. ´ `ー _,. -‐'’ / \f⌒ヽ. |  ̄ ヽ ´ / \ ヽ! \ / ! /`≫‐- -‐…‐- \ / ! /`y'´ // ̄) `丶 _ア爪 .' /`y' // / ‘, -‐</ノ ヽ ′/`y' // / L ,-< ∨\ ! _, イヽ/ | し' 丿 | / ヽ. ヽ/ 丁 〉 // | r−、 / / / .′  ̄  ̄ | U `ー― - イ / / ' | U | / ! 若草物語 ナンとジョー先生 これからjavascript一本で生きます よろしくおねがいしまうー よくsetTimeoutつかって関数を一定時間繰り返し実行する例を見るけど メモリリーク(スタックオーバーフロー)しそうな気がしてならねえ function viewTime() { var date = new Date();//これはスタックに貯まるのか? console.log("date = " + date); setTimeout(viewTime,1000); } ああ違う、非同期だからsetTimeoutが終わった時点で消滅するのか 納得 ローカル変数なんだから関数終了で破棄されるだろ 非同期とか割り込みとか関係無い >>296 わからんやつだな setTimeout が 指定時間後に実行する関数を設定しているだけでそこで呼び出してるわけじゃない ってすぐに理解できてないと viewTime() setTimeout() viewTime() setTimeout() viewTime() ... みたいに再帰呼び出ししてるように錯覚しちゃうってことだろうよ 再帰呼び出しなら呼び元は終了してないからやばいよね 次の段階として、非同期で呼ばれるとなんとなく理解はしていても 別のコンテキストで実行されるってのがわかってないと this とか使ってあれえ?ってなことになる >>297 それは仮想的なコードだと思うけど、クロージャじゃないんだから一回毎に viewTime 内のメモリはGCが解放してくれないとおかしいんじゃない? そうでなければ、ブラウザのバグだと思うけど じゃあここでいいぞ。 一応俺のスタンスを言っておくと、俺はお前みたいな奴が嫌いじゃない。 お前はあのスレの中で唯一積極的にコードを書き、IDを付けて議論に持ち込み、論理的に解決しようとする。この点はいい。 ただなあ、技術的に余りにも稚拙すぎるから、色々空回りしている。 だからやる気があるのなら少しはサポートしてやるよ。上達したいかどうかはお前が決めろ。 ちなみにマジでウザイから無駄に吠えるのは止めろ。お前が大したことがないのは事実なんだよ。 今のお前ではあのベンチマークがどれだけ間抜けなことになっているのか分からないのだろうが、 上達した後から読み返せば今のお前の痛さは発狂レベルだぞ。 まあ、今のお前には俺が嘘を言っているとしか思えないのだろうけども。 とはいえ、あのスレの中の初心者で上達する可能性があるのはお前だけだ。 他の馬鹿共はお前と同様にあのベンチの問題が分からないにもかかわらず、煽ることしかできない無能共だ。 そもそも俺はお前みたいに「自分でやる」タイプじゃないとプログラミングには向かないと思っているので、 一から教えてくださいとか言われても死ねとしか思わない。 だからあのスレにたむろしている馬鹿共が何であそこにいるのかも謎なんだが。 もしやるのなら、こちらのスレの内容は向こうには投稿しないように。ゴミ共が増えるだけだから。 ベンチマークの結果がデタラメすぎるので訂正したくなると思うが、その必要もない。 心配せずともJavaScriptの個人的Web情報はデタラメばかりだし、 馬鹿は馬鹿のままでいればいいし、強制的に教育する方法もないんだよ。 今のお前のように、自分で馬鹿を止めますと決心させるしかないんだ。 そして自分で学ぼうとする心がある奴は、あの経緯ならこちらを見ている。だから、転載する必要は全くない。 マジであのスレ終わっているぞ。いろんな意味で。 まあとにかく、どうするかはお前が決めろ。 with(this){してその中でプロパティ読むのってアリ?} withはjavascriptの汚点。今すぐ脳内から消去しろ。 匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、 BitTorrentがオープンソースで開発されています 言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか? Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします https://twitter.com/Lyrise_al ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw The Covenant Project 概要 Covenantは、純粋P2Pのファイル共有ソフトです 目的 インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します 特徴 Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW) 接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です DHTにはKademlia + コネクションプールを使用します UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります) 検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません : たまにwithあったらなって思うことはあるな 例えばWebpackがモジュールに引数で渡す挙動とか http://www.cybersyndrome.net/ ここの検索結果画面、例えば http://www.cybersyndrome.net/search.cgi?q=& ;a=&f=&s=&n= からプロキシ一覧を取得しようとしてXMLHttpRequestを使ってresponseTextを見てるんだけど どうもscriptを動かさないとプロキシが表示されないみたい そんなわけでresponseTextの中の3番目のスクリプトを動かしてプロキシ一覧を表示させたいんだけど どうするのが良策ですか?ちなみにChrome java挫折したんでこっちにきました だいぶとっつきやすい・・・気がする ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の 両院で、改憲議員が3分の2を超えております。 『憲法改正国民投票法』、でググってみてください。国会の発議は すでに可能です。平和は勝ち取るものです。お願い致します。☆☆ javascriptで配列の要素それぞれに関数を作用させて要素を作るってできますか? var a = [1,2,3]; function f(x){return x+1;} var b = f(a);// b = [2,3,4]; みたいな javascriptの正規表現で A/B/C(http://hoge.com/fuga )/X/Y このような文字列を/で分割したいが、()の中の/は分割の対象にしない ということはどのようにすればいいでしょうか? >>324 括弧がネストしてなければnegative lookahead”(?!)”で ネストしてたら知らん https://regex101.com/r/j03SqS/2/ ありがとうございます ネストしてないのでこれで事足りそうです XMLHttpRequestを使って取得したページのスクリプトを実行させようとしているのですが できません 取得したページを構成 var doc =document.implementation.createHTMLDocument(""); doc.body.innerHTML =req.responseText; このdocの中のscriptタグを取り出し 新たにscript elementをdoc.createElement("script")で作りコピーし 更にappendChildでスクリプトを追加し直せば実行されるかと思いましたがされませんでした(Chrome) なにかいい知恵はないでしょうか 今ふと思ったのですが 作っているものがChromeの拡張機能なのでセキュリティ設定で外部のスクリプトができないようになってるだけかもしれません ちょっと見直してきます なるほど とりあえず目的に対して別の方法を思いついたのでスクリプトの再実行はやめておきます 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 9O7AM "abcde?fgh".match("e?f") これが ["f", index: 6, input: "abcde?fgh", groups: undefined] になるんですが(chromeブラウザのコンソールで確認) 文字列の中の?ってどういう扱いなんでしたっけ? match("e?f")の"e?f"は文字列リテラルじゃなくて正規表現/e?f/と解釈されるということですか? javascriptのオブジェクトの書き方で {hoge:hoge}とかこうとして{hoge,hoge}と書いてエラーにならなかったんですが これって有効なんですかね? あーわかりました var a = 2; で var x = {a}; とすると var x = {a:2}; と同じになるんですね >>338 勉強になります https://mevius.5ch.net/test/read.cgi/tech/1489511075/862 で質問した者なのだけど、 String.matchとRegExp.execの挙動の細かい違いについて分かる人居る? 仕様書はMDNから飛べるけど一応以下。 https://tc39.es/ecma262/#sec-string.prototype.match https://tc39.es/ecma262/#sec-regexp.prototype.exec 正直俺はよく分からない。 問題になるのは質問した内容で、再掲すると、 '@time;prop1:style1;prop2:style2'.match(/(^|[@;])[^@;]*/g); // 結果 ["", ";prop1:style1", ";prop2:style2"] 、俺の想定 ["", "@time",";prop1:style1", ";prop2:style2"] '@time;prop1:style1;prop2:style2'.match(/(^.|[@;])[^@;]*/g); // 結果 ["@time", ";prop1:style1", ";prop2:style2"] 、これは納得 の前者の挙動が謎だったのだが、 var re = /(^|[@;])[^@;]*/g; var str = '@time;prop1:style1;prop2:style2'; re.exec(str); // 結果 ["", ""] console.log(re.lastIndex); でちまちま調べる限り、lastIndexは0のまま固定されており、俺の『正規表現の』理解は間違いではないことは分かった。 当然これだとMDNのexecにあるような while ((myArray = myRe.exec(str)) !== null) みたいなことをすると無限ループする。 だから String.match はそうならないように何かしら対策がしてあって、結果、頭のマッチが取れないようだ。 なのだが、仕様書を見ても違うのは分かるが何がどうなのかよく分からない。 String.matchでは (^| の条件は駄目で、 (^.| のように、「文頭」ではなく「文頭の文字」に当たるようにしないといけない、ということなのか? すいません分かりました。 String.match は RegExp[@@match] を読んでて、その中で RegExp.exec を呼んでいる。 RegExp.exec は当然そのまま RegExp.exec を呼んでいる。 だからそのままだと当然挙動は同じになるのだけど、String.matchの場合、 > 4. If matchStr is the empty String, then > a. Let thisIndex be ? ToLength(? Get(rx, "lastIndex")). > b. Let nextIndex be AdvanceStringIndex(S, thisIndex, fullUnicode). > c. Perform ? Set(rx, "lastIndex", nextIndex, true). https://tc39.es/ecma262/#sec-regexpbuiltinexec って書いてあったわ。 つまりマッチ結果が空文字だと必ず一文字進めるようになっており、「文頭マッチのフラグを落とす」仕様にはなってない。 この仕様でいいのか?という気もするが、とにかくそうなっているようだ。 お騒がせしました。 というかこれはMDNに注意書きがいる案件だ。 勿論君の手柄にしてくれていいから、誰かやっておいてくれ。 追記は取り敢えず4ヶ所(3文案)か? 1. String.match に、 「空文字にマッチした場合、その空文字の次の文字にはマッチしません。 このため、空文字マッチを含む正規表現(オブジェクト)を与えた場合、全てのマッチ文字列が結果に含まれないことがあります。」 2. String.replaceに、 「空文字にマッチした場合、その空文字の次の文字にはマッチしません。 このため、空文字マッチを含む正規表現(オブジェクト)を与えた場合、全てのマッチ文字列が置換されないことがあります。」 3. RegExp.exexとRegExp.testに、 「空文字にマッチした場合、lastIndexが更新されません。(+1されません) このため、空文字マッチを含む正規表現(オブジェクト)を与えた場合、 ループ内でマッチ結果の空文字判定を行わないと、無限ループします。」 問題となるケースは、空文字マッチを含む正規表現+空文字マッチ直後にマッチ文字列が来る場合。 具体的には>>341 searchはgマッチ関係ないからセーフ、 splitに関係するケースがあるかは分からない。(ぱっとは思いつかない) matchAllは知らん。 ちなみに以前 test について文句を言った者だ。これについて対応してくれた人はありがとう。 今回も頼むわ。 なお今確認すると、 > 注目すべきは、別な文字列で検索しても lastIndex がリセットされないことです。 > https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test とモロに書いてあって素晴らしい。ただこれはもっと赤字とか目立つように書くべきだが。 俺はWeb板は無視しているが、これについてだけは告知貼っておく。 いずれにしてもMDNの更新誰かよろしく。 俺は全世界の問題を一人で背負い込むほど若者ではないんだよ。 MDNの決定プロセスなんて知らんし、 それ以前に他人が噛むことにより「承認」の手続きがなされ、よりましな方向になると信じてる。 バグを見つけるのも十分な貢献だし、それをMDNに記載するのも同様だ。 だから一人でやる必要も意味もないし、それ以前に一人でやるべきではないと思ってるんだよ。 お前らが「こんなのMDNに記載する必要なし」と思うのなら放置でよし、 「こんな落とし穴があるのなら共有すべきだ」と思うのなら、 俺はテストパターンを提供したのだから、お前らはMDNを書き直すことによってcontributeしろ、ということ。 一般的にはメンテナに投げるものだが MDNはアカウント登録さえすれば修正できるものなのか >>348 多分そう。おそらくwikiと同じシステム。 ただ内容は英語版の翻訳でしかないので、おそらく翻訳以外の提案は英語版に出さないといけないのではないかな?と勝手に推測。 いずれにしても、経験者がいるのならそいつに頼むのが確実、といったところ。 JavaScript界隈はWebに間違った情報が垂れ流されてるケースが多く、 それは要するに「背伸びして書くから」だ。 大して経験もないのにさも熟練者のように振る舞うとか、 会社にしたって「技術力の宣伝になる」と考えて精一杯背伸びして書いてる。 だからオイオイ?みたいなのも散見されるだろ。 しかしこれも使いようだ。言い方を変えればやる気はあるのだから、そういう奴らにはやらせればいいのだ。 問題は、そういった「背伸び」状態で書く内容はゴミな事が多いので、そうではなく、 ちゃんとした内容をこちらが提供してやろう、というわけ。 そしてMDN等にコミットして箔をつけたがっている奴にやらせ、 こちらは手間を省け、win-winだ。 というわけで誰か頼む。 だから既に言ったろ。 俺はこれは単独でやるよりも誰かにやらせる方が妥当だと考えてるんだよ。 それは、俺が間違っている可能性もあるから。 最低限、誰かが追試し、また、誰かが内容に賛同することを待つのは重要なことなんだ。 これによって暴走を防げる。 そしてMDNに書くこと自体は本来は大した作業量ではないが、 こういうのって往々にして政治的だから、場合によっては無駄に嵌ることになるんだよ。 実際、wikiだって編集合戦したり、その上で色々ルール決めたりしてるだろ。 MDNだって色々ある筈なんだよ。 だからそういうのを知ってる奴が出てきてどうするか話し合えるとしたらそれもありなんだよ。 日本みたいな根回し文化はないはずだとは思うけど、それも実際どうなのかは分からないし。 ただ、そこら辺を知ってる奴が本当にいたとして、 いちいちグダグダ説明するよりは自身で書き換えた方が早い、と判断すれば、勝手に書き換えてくれる。 前回も(ここに書いたのが反映されたかは確実ではないけど)「俺が書く」みたいな宣言もなく書き替わっていたし。 ROMな人が書き換えるのもありなんだよ。 いちいちグダグダ言ってくるのは若くてそれなりに正義感があるのだと思うが、 本件は1ヶ月後にきっちり書き替わってれば問題ないんだから、そんなにスピード感は要らないんだよ。 若くて元気があって、今後もJavaScriptに関わる気があるのなら、お前がやってくれたっていいんだぜ。 経験不足を自覚していて辞退するのなら、その点は俺が補ってやる、というわけでさ。 コミュニティは一人で回したり改善するものではないんだ。 各自がそれぞれ持ち寄って改善していくものなんだよ。 参加する気がある奴は出てこい、というわけ。(勿論黙って勝手にやってくれてても助かるが) サンプルコードだけ書いて Hi! (sample & result) plz help me Thanks. で良い >>352 お前はプログラマを止めた方がいい。 今からのプログラマはその程度の英語能力では生きていけない。JavaScriptも当然該当する。 ネタならウザイだけだから止めろ。 今時の若者プログラマはお前以上に英語は出来るから、全く面白くもないしウザイ。 「英語」が最大の問題だとお前が勝手に捉えたのは、お前自身が英語が全く出来ないからだ。 問題はそこではない。 そして仮にお前のように「英語」が最大の問題なら、英語が出来る奴と協力すればいいだけだ。 それもせずに、カタコト以下の英語で結論すら書かないのは邪魔であり、スパムでしかない。 英語が出来ないお前みたいな馬鹿が何かMDN等にcoutributeしたいのなら、 お前が英語が出来ないことを認めて、誰か最低限の英語が出来る奴を募ることだ。 俺が今やっているような方法でもいい。 だから仮に、お前が俺の英語能力を心配してくれたというのなら、 当然お前の投稿は普通の日本人よりも圧倒的に上手い英語で書かれていないと話にならない。 明らかにそうではないのだから、お前は本当にウザイ。 ただな、日本人は最低限度の英語は書ける。 相手と対面して話しているわけではないのだから、時間は無限にあるし、ゆっくり考えて書けばいい。 上手い英語である必要はない。ただし伝わる必要はあるが、 細かい文法(三単現のsとか)なんて間違ったところで伝わるから全く問題ない。 だから書けばいいだけだ。 お前みたいな、英語が出来もしないのに出来る気取りの馬鹿は何もしないから上達出来ずそのままなんだよ。 >>352 ひとつだけ注文 レスアンカーはしっかりと合わせてくれないかな? あと、できれば上から目線じゃなくて仲間として話をして欲しい >>353 何のことだ?と思って確認したが、 俺のJaneでは2に「ここ壊れてます」という投稿があって、一つずれているようだ。 F12で確認したところ、現在のデータにはないようなので、これは俺が合わせよう。 >>354 ゴミクズを丁寧に扱うのは断る。 ゴミクズが調子に乗るだけで、何の利益もないのはもう何度も経験している。 俺はゴミをゴミとして扱うだけであって、まともな奴にはまともに返事をしているつもりだ。 気に入らないなら無視でいい。お前が俺をゴミ扱いするのもお前の自由だ。 それ以前に、何でもかんでも「上から目線ガー」も死ねばいいと思っている。 お前のことだ。 俺がクズだとしても、それをMDNに書くかどうかは全く関係ないことだ。 クズからもたらされた情報であれ、正しければ、それなりに対処すればいいだけだ。 お前は何がしたいんだ? 俺はお前と群れようなんて1mmも思ってない。 俺は>>351 をゴミだと判断した。だから叩きを行った。これで正しいと思っている。 これに文句をつけるお前は「丁寧な態度」なら間違いであれMDNに書き、 「粗暴な態度」なら情報が正しくてもMDNには書かない、と推測されるわけだが、 それは俺から見たらコミュニティの破壊者でしかない。 去れ。俺がお前を仲間として認めることはない。 仲間として扱って欲しいのなら、最低限、その価値がある投稿をするべきだ。 ここは匿名掲示板であり、お前がリアルでどんな地位にいたとしても、知ったことではない。 ここでは各自の書き込みで各自を証明するしかない。 「内容」よりも「態度」を重視するお前は俺からすると十分ゴミだ。 何度も言っているが、俺はこの件をMDNに反映することに賛同し、汗をかこう、という奴を募っているだけだ。 汗をかく気もなく、ただ乗りだけ目指している奴なんてコミュニティには要らない。死ね。 それで構わんぞ。 俺はゆとり----なにかにつけて「態度ガー」「上から目線ガー」「ぼくにやさしくしてくれなきゃいや」な連中----とは 価値観を共有出来ないし、したいとも思わない。 それ以前にゆとり的ポルポト型共産主義----「知識を持っていても持っていなくてもみんな平等」----も 間違っていると思っている。知らないよりは知ってる方が偉い、という価値観だ。 ただそれで異常に威張り散らす、例えば昔の仕様書廚みたいな奴を正当化することにはならんが。奴は異常だ。 俺が要求しているのは簡単なことだ。 ・MDNに俺が書く、という奴を募っている。 ・或いはこれに準じ、実際にMDNに書いたことのある奴からのノウハウの提供も待っている。 ・また、「文案が悪い」等の修正も勿論歓迎だ。 そもそも俺は仕様書を読み慣れておらず、最初から間違っている可能性すらある。 だからこの場合は反論とそれを証明するテストパターンを出してもらえれば素晴らしい。 というわけだ。 それをお前らゆとりは技術案件全無視で「態度ガー」しか言えないんだろ。 逆に言えば、「やさしくしてくれるひとならいうことをきく」という価値観な訳だが、 それは幼稚園児----お菓子をくれるから付いていく----と同レベルでしかない。 俺は幼稚園児とつるみたいなんて思ってない。 ただ、Web板久しぶりに見たが、前よりましになっているのに驚いた。 ゆとりというモンスター出現に右往左往している前世代より、 ゆとりがいる世界で育ったゆとり後期/さとりの方がゆとりの扱い方が上手いらしい。 実はこれは他の場所でも同傾向が散見されていたりする。 5-6年前:JavaScriptのスレは他言語に比べて異常にレベルが低かった 1-2年前:他言語にもゆとりが流入したらしく、他言語も著しく酷くなった 最近:JavaScriptのスレに復活の兆し? <-- new! 2-3年後:他言語スレも復活か? みたいな感じになってる。 JavaScripterは俺が思うに年齢層が他言語と比べて若い。だから先行指標になってる。 俺達がどうにも出来なかった荒らし共をWeb板の連中がどうやって追い払ったのかは分からないが、 いずれにしてもこの点についてはWeb板の連中の方が上だという事実は見えたので、俺は引き続き静観する。 (というより俺が余計なことをするとおそらく悪化するだけなので何もやらないし、読まない) ネットはゆとり撲滅運動をやるべきだ。 ゆとりは「ゆとりに対する人格否定は絶対に許さないが、気に入らない奴はとりあえず人格否定」な訳だろ。 今やってるように。 だから俺みたいに、「人格否定?やりたきゃやれよ。ゆとりみたいなクズに人格を認められる意味なんてそもそもない」 とされると対処出来ず、ひたすら人格攻撃連呼だろ。今みたいに。 全くお前らは勘違いしてる。クズからは否定された方がクズが寄ってこずに助かるものだ。 だから俺はそれをやってる。 ゆとりは本当に根本的に勘違いしてる。 俺にマウント取りたければ、仕様書をよく読んで俺の間違いを探せばいいだけだ。 俺に間違いがないのなら、俺が偉そうな態度を取ったところで『何も問題ない』だろ。正しいんだから。 ゆとりの「丁寧であれば間違ってても許される」って価値観が根本的に間違いだ。 まず「正しいかどうか」であって、態度がどうこうは二の次だ。人格攻撃でマウント取ろうってのがおかしい。 そしてこういう俺を気に入らないのなら最初から無視すればいいだけ。これも最初から言ってる。 おれはゆとりと会話したいなんて思ってない。相手するだけ時間の無駄だからだ。 ただ、これにさとりは気づき初めて対処出来ている。結果的に俺達はさとりに学ぶべき事があるのだとは思う。 ちなみに俺とゆとりとの差異は、典型的には>>351 を俺は「荒らし」だと見なしていることだ。 理由は「話が前に進まず、むしろ退行するから」だ。 これをゆとりは(俺の理解では) ・態度が偉そうではないから荒らしではない、むしろ偉そうなお前(俺のこと)が荒らし ・ゆとりは馬鹿だから英語が出来ない、だからみんな自分と同じで英語が出来ないと思っているし、思いたい ・そして英語が出来ないことも悪いなんて微塵も思ってない、むしろみんな違ってみんなイイ! ・それをガーガー喚き散らすお前(俺のこと)なんて大嫌い!それ!人格否定攻撃! な幼稚園児レベルの価値観だ。だからゆとりが混ざるとコミュニティは崩壊していく。 いやゆとりにとってはそれが居心地がいいのだろうが、それ以前の世代にとっては大迷惑でしかない。 ところがさとりはゆとりに対応する何かを持っているようだ。これはちょっと確認する必要があるな、という感じ。 今俺がグダグダこのメタ案件を書いているのもそのため。 ゆとりは>>351 みたいな糞投稿をしなければよかった、なんて反省は絶対せずに、 ひたすら「お前(俺のこと)が悪い!」と人格攻撃の連呼だ。俺はそれがゆとりの本当に駄目なところだと思っている。 そして俺は既に書いたがゆとりは殲滅対象だから、当然こういう機会が与えられたら「ゆとり死ね」とし、 「ゆとりが何故死ななければならないか」をきちんと説明するわけだ。今やっているように。 そうやって、少しでもネット全体がゆとり撲滅に動く助けになれば、と思っている。 これがコミュニティ(つまりネット全体)に対する俺流の貢献だ。 それに対してゆとりがゆとりに敵対する人(つまり俺)を攻撃して「ゆとり的居心地が良いコミュニティ」を維持するのは構わない。 ただそれなら俺達、或いは俺が所属しているコミュニティにちょっかい出さないでくれ。 ゆとりはゆとりだけの、俺達旧世代は俺達旧世代だけでそれぞれコミュニティを維持すればいい。 そしてどちらのコミュニティが生産的かで競えばいいだけだ。 本来ゆとりはネット接続率100%でそれなりの人数がいるのだから、 ゆとりだけの(ゆとりにとっては)居心地のよいSNSが出来ても何ら不思議でないし、 逆に、ない方が不自然なわけだが、ない。 これは、ゆとりがお子ちゃま過ぎてコミュニティの維持も出来ないし発展もしないからだ。 俺は最初から「ゆとり的価値観ではない」と明確に分かるように書いてるつもりだが、 それが読みとれなかったというのなら、それは俺の落ち度でもあるから、もっと分かりやすく書く。 本件については俺は今後必ず「ゆとり死ね」と入れるから、これでゆとり馬鹿にも分かるか? ゆとり死ね 前立ってた質問スレに常駐してヘイト撒き散らしてた荒らしかな >>361 そうやって嫌いな他人を全部脳内から排除してるのがゆとりの特徴だ。 だからゆとりはクズのままなんだよ。 ちょっと考えれば分かると思うのだが、 仮にMDNに、或いはJavaScriptの新規機能を標準化委員会に「リアル」で提案するとき、 そこで真面目に提案内容を議論/審議している状況で>>351 が許されると思っているのか? 俺の投稿はお前にとって課長か係長か、或いは同僚か部下だが、いずれにしてもあり得ないだろ。 ゆとりは「ネット」では何をやってもいいと思いこんでいる。だから何も生産出来ない。 ゆとり以前の世代はリアルの延長でネットを使っている。 だから匿名でも単に匿名なだけでリアルレベルの議論は出来るし、また、それを目指している。 相手を見ておもねり、或いは自分が匿名なのを利用して場を破壊しまくるゆとりのようなクズではない。 そしてさとりはこれらの馬鹿騒ぎを見て、何か思うところがあるのだろう、確かに達観してる。 ゆとり死ね といってもこれはおそらく「三つ子百まで」だからゆとりは今後ともネット上ではクズだ。 これは俺はネットデビューの状況に依るものだと推定している。 ゆとり以前: SNSが未発達/アングラで、ネットデビュー時の接続相手はリアルの知り合いが殆ど。 ゆとり: 2chやニコ等が一般的となってきて、ネットデビュー時の会話相手は会ったこともない人が殆ど、そしてほぼ匿名。 さとり: LineやFaceBook等リアル系SNSが一般化してきて、ネットデビュー時の接続相手はリアル友人が大半だが、 逆に既読疲れ等が発生し、これらを避けるように匿名SNSに流れてきている。 そして俺らゆとり以前の世代は「昔のネットはー」という幻影に囚われてそこを目指すわけだが、 これはゆとりがいる限り無理だ。作り上げるより壊す方が断然簡単だから。 実際、俺らがこっちで質問スレを復活させ、俺らが回答することにより質を上げたら、 ゆとりがWeb板から全員移住してきて潰したのは事実だ。 それで俺を荒らし扱いなのだから、お前らゆとりは全く腐ってる。 ゆとりに反対する限り荒らし、という極めて単細胞なゆとり独裁主義でしかない。 ゆとりがイナゴ行為を全く悪びれずに行う状況では、ゆとりが存在する限りゆとり標準以上の質を保つことは出来ない。 ところがさとりはむしろ俺ら旧世代よりももっと監視が厳しい状態でネットをやってる。 だからゆとりみたいに完全にたがが外れきって振り切っている感じが微塵もない。 そして死ね死ね言い慣れた俺に対しても疑念を持つわけだ。 そんなこと言っちゃいけません、と「正しく」教育されてるから。まあこれは悪いことではないが。 結果的に、俺はゆとりとは組めないが、さとりとは組める。俺からするとさとりは常識の範囲だからだ。 逆に、さとりにとっては俺も十分にゴミかも知れないが、それはさとりが決めることだ。 一応俺は正論を吐いているつもりだし、馬鹿な発言がなければ俺が叩くこともない。 勿論そうでなければ俺を叩くのも自由だし、好きにすればいい。 俺はこの状況を危機的だと見て、ゆとりを排除できる掲示板を準備中だ。 実際にはゆとりを排除ではなく、隔離に近いが。 システムとしては、今で言うと8chかredditが近い。 問題があればmoderatorが勝手に判断してBANを行う。 そしてそのmoderatorはコテハン(に近い物)ではあるが匿名だ。 勿論ゆとりである可能性もあり、その場合は多分俺がBANされるわけだが、それも自由だ。 そういう掲示板を準備している。 といってもあと数年かかりそうだが、さとりが社会人デビューし始める頃には出来ればいいなと思っている。 ゆとり死ね 実際、有効な議論の為に誰をBANすべきか、というのは極めて難しくて、 ここで俺がどれだけ説明したところでそのレベルに達してない奴には理解も納得も出来ないと思う。 だから俺は、それに対しての解、「結果的に有効な議論が出来たBANを行った者が良いmoderator」を導入する。 単純には、俺をBANした場合は俺はもうその板に書けなくなる。 結果、俺の有効レスも駄レスも含めて全部失う。 そしてそれが正しかったかどうかはユーザー、つまり参加者が判定する、というものだ。 そのBANによりその板の質が上がれば、その板は賑わうし、逆なら過疎る。 結果、上手いmoderatorがいれば、 コミュニティが健全であれば結果的に全く意味のない発言をする連中=ゆとりが排除される、というわけだ。 そしてユーザーが他板の同種スレに移動するコストをほぼゼロにしておけば、 BANを濫用して板の質を落とすmoderatorは板ごと過疎化して殺せる。 これでmoderatorとユーザーの相互BANを達成する。(この仕組みが8chやredditにはない) 結果的には昔の(今もかも?)ニコのコメのフィルターレベルみたいなことをやろうとしている。 そして逆に俺自身が隔離される可能性もあるわけだが、 その場合は、俺が間違っていたという事実を突きつけられただけであり、それもありだ。 興味がある人はちょっと心に留めておいてくれ。 もっとも、起動するときにここで告知するかどうかはまた別問題なのだが。 ゆとり死ね 一応具体的に言っておくと、俺なら>>351 を議事妨害行為としてBANする。 ただしここでやっているような説明はなし、いきなりBANして終わりだ。 BAN基準はリアル議論基準準拠だ。 説明は常に時間の無駄だからやらない。 分かる奴は説明無しでも分かるし、分からない奴にいくら説明しても理解されることはないからだ。 ナイスBANと思う奴は俺の板に書けばいいし、 BANに疑問を持つなら俺の板に書かなければいいし、或いは各自の板では俺をBANできる。 そういう掲示板だ。 なお海外には似たようなものなら実は既に沢山あって、既に言ったとおり、有名どころは8chやredditになる。 日本は5chとふたばしかなくて、また、「それしかない」と思いこんでいること自体がかなり大問題だ。 根本的な問題は、俺達とさとりは「匿名掲示板って酷いな(リア友とのネット関係と比べて)」なのだが、 ゆとりは「ネットは好き放題出来るもの。匿名で当たり前だし、これが普通」と思いこんでいるところ。 ただ俺にはこれを転換させるだけの方策はない。だからゆとりをBANするしかない、と思っている。 それで、ゆとり流幼稚園と、非ゆとり方式で、どっちが生産的か勝負だ、というわけ。 ゆとり死ね 前にも同じようなことを言って「プログラム板」と「Web制作板」でやろうとしたが、 前述の通り、ここ5chでやってもゆとりはましな方に常に寄生するので、(自らでは全く改善する気がない) ましになったと思ったら結局ゆとりが大量に押し寄せてきて駄目になる、の繰り返しだった。 だからもう、ゆとりが押し寄せて来れない構造の所を作るしかない、という判断だ。 そしてインターネット上ではそれはBANしかない。 賛同する奴は噂が流れてくるのでも待っていてくれ。 ゆとり以前の世代は大歓迎だ。そしてさとりも多分歓迎出来る。 俺より上手いmoderationが出来る奴がいれば、結果的に俺はそいつに従うことになる。 もしかするとさとりにはこのレベルの奴が居るのかも?というのが今の俺の見立てだ。 javascriptにいつのまにかclassなんてできたのか javascriptでクラスを使いたいんですが 例えば var A = function(name){this.name = name;} A.prototype.hello = function(){setTimeout(function(){console.log("Hello, my name is "+this.name);},1000);} var a = new A("aaa"); a.hello();// ここでthisがaを指していない この場合helloの中のsetTimeoutの中のthisがaを指すようにするためにはどう修正すべきですかね? setTimeoutに渡すcallbackをアロー関数にしてthisが変化しないようにする ありがとうございます アロー関数を知らなかったのですがちらっと調べた感じできそうなのでやってみます アロー関数問題ない環境を対象にするならクラスもclass構文使ってもいい気もする わいはjs4年の実の娘と一緒にお風呂に入って対面座位で抱きしめ合ってベロちゅう唾飲みせっくすしてる。つるぺたとつるまんが気持ち良すぎて抜かずで連続3回中出しした。 禁断を犯した事実が興奮をさらに煽りもう近親相姦は当分やめられない。妻にはもちろん内緒。娘がいて本当に良かった。 codesandboxが凄い手軽で便利なんだけどクソ重い これってうちのPenMノートの力不足?サーバ側の問題? ブラゲーの自動化をjavascriptでやってみようかなって思ってるんですが 対象のブラゲーはUnityでWebGLを使ってるらしくcanvasオブジェクトの指定した位置をクリックできればできそうなんですが 指定した位置をクリック、はjavascriptでどう書くべきですかね?そもそも書けるんですかね? 正直、JavaScriptはC++使いから見たら死んでる。 ブーストにBIGINTもBIGFLOATもあるから数値計算で秀でる部分が無い。 STLあるから、データ構造で困ることもない。 JsonIOさえあれば、アッパーコンパチなのがC++。 isn't it? 単にお前のユースケースにマッチしてないってだけじゃね その思想だとC++(あと数値計算的にFortranか?)以外の全ての言語が死んでそう Raspberry Pi4でVSCodeもどきが使える Raspberry Pi 4でVSCodeの100%オープンソース版のVSCodiumを使う https://pastebin.com/BV4Liiqv >>377 おじいちゃん、C++のスレに行くといいよ https://lpeg.info/html/javascript_css_calendar.html > 「let」は連続で使う事ができないので、jsコード内に「let」が並んでいる場合は全て「var」に変更しましょう。 自分のスクリプトを動作させるために、他のスクリプトのletをvarに変更しろという。 C/Javaから入ってC++、C#、Pythonなんか今まで触ってきて初めてJavascriptの勉強始めたんだけど難しすぎない…? 前評判聞いてもっとちゃちいとか初心者向けとかそういう想像してたんだけど全然違った これまで経験してきた言語とそもそも考え方とか概念が違いすぎて理解できないことが多すぎる やりたいことだけピンポイントで勉強したらいいよ 今となっては出来ることや構文やAPIが増えすぎてすっかり複雑になっている デフォルトで色々非同期(特にコールバック設計のAPI)だとかイベント駆動になってるってことじゃないの? それはもう慣れでしかないが 少なくともC++より難しいなんてことはあり得ない 単にAPIのデザインに慣れてないだけ PromiseとPromiseじゃない値を受け取る関数を定義したいのだけどどうやって判定すんの? async function get(x) { if ( isPromise(x) ) return await x; else return x; } isPromiseの完全な実装方法を知りたい ググるとオブジェクトがthenを持ってたらPromiseだぜ!なんてジョークみたいなコメントが出てきて困った >>387 Promiseじゃないのもawaitしてもいいのよ 初心者ですがGoogleのGrasshopperというアプリで勉強を始めました どうでしょうか? Google製のJavaScript教育ツール「Grasshopper」は基礎から学べて初心者に優しい! - どれ使う?プログラミング教育ツール - 窓の杜 https://forest.watch.impress.co.jp/docs/serial/progedu/1404361.html プログラミングはわからないことを検索して調べるってのが基本になるから 入門書とか入門サイト見つつわからない部分は個別に検索して調べるとかでどんどん知識広げていく そういうアプリを使ってもいいけどそれ1つだけで習得できるとは考えないほうが良いかな ありがとうございます 別の入門書を読んでるんだけど、理解は出来るんだけどすぐに忘れますね 経験を積んで覚えていくしかありませんね JavaScript作成って家で副業になりますか? まずChatGPTで実現したいお題のコードを大まかに書いてもらって、それの間違ってる箇所を指摘していくと、最終的に正常に動作するコードが書けるな AIってこういう風に使うんだということが理解できた read.cgi ver 07.4.6 2024/03/23 Walang Kapalit ★ | Donguri System Team 5ちゃんねる