文字列操作の比較表: Ruby, Python, JavaScript, Perl, C++ Ruby, Python, JavaScript, Perl, C++ の文字列操作の比較表を作りました。配列操作の比較表の続編です。間違いなどがあったらご指摘いただけると助かります。 Ruby (String) Python (str) JavaScript (String) Perl C++ (std::string)
文字列操作の比較表: Ruby, Python, JavaScript, Perl, C++ Ruby, Python, JavaScript, Perl, C++ の文字列操作の比較表を作りました。配列操作の比較表の続編です。間違いなどがあったらご指摘いただけると助かります。 Ruby (String) Python (str) JavaScript (String) Perl C++ (std::string)
書き上げた後に元記事の続きが出ているのに気づいたが、方向性が違うようなのでそのまま掲載。 404 Blog Not Found:javascript - プロトタイプ的継承 (元記事: Prototypal Inheritance) より。継承という言葉は意味が広いので、この操作に対してはチャイルドの作成といったほうが個人的にはわかりやすい。 さて、元記事で紹介されているコードではプリミティブ値からのチャイルドの作成 (継承) ができなかった。これはなぜかといえば、オブジェクト作成の際、プリミティブ値をプロトタイプ ([[Prototype]] 内部プロパティ、__proto__ プロパティ) に設定することはできないからである。 そこで、プリミティブ値が渡された場合は、それをラッパオブジェクトに変換することにする。といっても場合分けの必要はない。Object 関数を使えば、プリミティブ値
2006年10月18日21:00 カテゴリLightweight Languages javascript - プロトタイプ的継承完全版 Kazuho@Cybozuさま、いつもありがとうございます。 Kazuho@Cybozu Labs: JavaScript の String 型を継承する 結論から言うと、String 型も継承っぽいことができます。こんな感じ。 おかげでプロトタイプ的継承モデルの完全版が出来ました。 AtomicなObjectを継承 これは、以下のように包括的に出来ます。 var Atomic = function(C){ var P = function(v){ this._v = v; }; P.prototype = new C; P.prototype.valueOf = function(){ return this._v.valueOf(); } P.pro
2006年10月19日11:30 カテゴリLightweight Languages javascript - Prototypal Object Modelの落とし穴 「404 Blog Not Found:javascript - プロトタイプ的継承」とその続編「404 Blog Not Found:javascript - プロトタイプ的継承完全版」は、案の定反応すべきbloggersが然るべき反応をしてくれた。これをbloggingの魅力と言わずしてなんと呼ぼうか。 プリミティブ値でもプロトタイプ的継承: Days on the Moon 書き上げた後に元記事の続きが出ているのに気づいたが、方向性が違うようなのでそのまま掲載。 IT戦記 - 関数一発でプロトタイプチェーンに繋げて、オブジェクトをクローンする。でも、実際はあそこまで複雑に書かなくても、できると思います ^^; 感想は
最近、プロトタイプ的継承の話しが盛り上がっています。 http://blog.livedoor.jp/dankogai/archives/50662064.html http://labs.cybozu.co.jp/blog/kazuho/archives/2006/10/javascript_string.php http://blog.livedoor.jp/dankogai/archives/50662606.html 最終形がやたら複雑になっています でも、実際はあそこまで複雑に書かなくても、できると思います ^^; そう思う理由 P 関数は object 関数の中でローカルのものである。コンストラクタとして使える必要はない。なので、 Atomic な場合でも P は function(){} でいい。 method 関数では P.prototype のプロパティに関数が代入されて
http://d.hatena.ne.jp/ladybug/20060926#p2 FireFox では、複数の SCRIPT タグがレンダリング対象に存在すると、そのすべての SCRIPT タグのソースコードを読み込み完了するまで、スクリプトエンジンは新しいスクリプトを実行しないようになっているようだ。また、レンダリングエンジンは読み込み終わったスクリプトをメモリ上で保持しているため、レンダリングと読み込みは完了しているがまだスクリプトエンジンにわたっていない、という状態のスクリプトを保持している SCRIPT タグを破棄しても、その SCRIPT タグで読み込まれたスクリプトは、きっちりスクリプトエンジンによって実行される。 えっ、と思ってしまった。Firefoxではちゃんと同時実行されてるような気がしてたので。 とりあえず、www.lingr.comに行って、以前作ったYahooペー
Ajax IME は Javascript を悪用しつつ強引にインラインかな漢字変換を実現しています. 簡単そうに見えて以外とややこしいのが,変換候補の表示. textarea のキャレット(カーソル) のピクセル単位での位置をなんとかして取得してその位置に変換候補を 出す必要があります. ありがちな google suggest ような補完インタフェイスだと inputbox の真下に出せばいいので位置は完全にわかるのですが,textarea は簡単ではありません. 調べた限り,どうやら標準ではキャレットの位置を取得できないそうです. ただし IE だと以下の方法でピクセル単位での位置がわかります. var caretPos = document.selection.createRange(); y = (caretPos.offsetTop + document.documentEle
SafariでXMLHttpRequestのresponseTextが文字化けするという話。 http://blog.33rpm.jp/garbled-on-safari.html 最近のバージョンだとcontent-typeがちゃんとしてれば化けなかったような記憶があるけど、まあともかくとして、Safariで文字化けするのはJavaScript側だけで対処することができたりする。 http://kawa.at.webry.info/200511/article_9.html これ読んでほんとかよ、って感じだったんだけど案外役に立った。livedoor Readerで使われてたり。 実際に使われてるコードはこんなの。 if(browser.isKHTML){ ajax.filter.add(function(t){ var esc = escape(t); return(esc.index
連載すんの? リファクタリングとか嘘で実は実践ビルトインオブジェクトハックなんだけど。 例題 配列 a = [3,5,4,2,1] から一番小さな値と、一番大きな値を取り出すにはどうすればいいか。 多分昔はこんな風に書いてたと思うんですよ。 a = [3,5,4,2,1]; for(i=0;i<a.length;i++){ if(i == 0){ min = a[0]; max = a[0]; } if(min > a[i]){min = a[i]} if(max < a[i]){max = a[i]} } 模範解答として、後先考えないやり方を提示しておく。 a = [3,5,4,2,1]; min = a.sort().shift();// 1 max = a.sort().pop(); // 5 短い。ただし、これをやるとaの内容は並べ替えられて最初と最後の要素が取り除かれる。 a /
_ JavaScriptでpreg_replace_callback (17:16) WikiParserをJavaScriptに移植してみようかと思ったら、preg_replace_callback相当の正規表現(Perlで言うと/eg)が見あたらない。っつーか、ないんだよね? しょうがないんで、こんな感じで動かしてみたんだけど、なんとも不格好な感じ。もうちょいいい書き方ないかなー。 function replace(str) { str = str.replace(/(123)/g, "' + callback('$1') + '"); str = str.replace(/'/g, "\\'"); str = str.replace(/\\' \+ callback\(\\'(.+?)\\'\) \+ \\'/g, "' + callback('$1') + '"); str = e
Perlなどの置換系の正規表現ではeというオプション(フラグ)をつけると、置換後の文字列をプログラム・コードとみなしてくれるわけですが、JavaScriptのreplace()の第一引数で指定する正規表現にはeオプションなどというモノはありません。しかし、replace()の第二引数である置換後の文字列にはStringオブジェクトや文字列リテラル以外にも関数を指定することもできるので、事実上eオプション相当のことが実現できます。エミュレートというのは正確ではない気がするけど気にしない。 具体的には、 var s = "asdf123asdf123456asdf123asdf"; document.write( s.replace( /123/g, function (num, idx, old) { return parseInt(num) + 333; } ) ); という感じ。上記例で
replaceメソッドをhackしてsafariでもreplace callbackを使えるようにしてみた。Safari バージョン 2.0.2(416.13)で上手く動いたそうです。手元に環境が無いので細かい検証はできませんが、とりあえず。 http://la.ma.la/misc/js/replace_callback/ 解説JavaScriptのString#replaceメソッドは文字列を置換して新しい文字列を返すメソッドですが、第二引数に置換後の文字列を指定する代わりにfunctionオブジェクトを渡してやると、Perlでいうところのeオプションみたいなことができます。 // 大文字を小文字に、小文字を大文字に String.prototype.swapcase = function(){ return this.replace(/([a-z])|([A-Z])/g,functi
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。 �> ��View in English ��> ��Always switch to English このチュートリアルは、 <canvas> 要素を使用して二次元のグラフィックを描画する方法を、基本から説明します。ここでの例は、キャンバスで何ができるかを明確に示すものであり、独自のコンテンツを作成するためのコードスニペットも提供しています。 <canvas> は HTML の要素であり、スクリプト(ふつうは JavaScript)を使ってグラフィックを描くことができます。これは例えば、グラフを描いたり、写真を合成したり、簡単なアニメーションを作成したりすることができます。 <canvas> は Apple が macOS Dashboard
JavaScript を学ぶ際に一番重要なのに、誤解されがちな setTimeout 系の概念 http://d.hatena.ne.jp/amachang/20060910/1157911122 上記はてブコメント http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/amachang/20060910/1157911122 JavaScriptがシングルスレッドなのは仕様? http://d.hatena.ne.jp/ajiyoshi/20060911 でsetTimeoutの仕様について熱く語られている.私も興味を持ったのでざっと調べてみた. まず超基本的な話としてマルチプロセスなOSにおいて完璧な 時間制御というものは無理ということだ.これは話を極端にして 「1万個ブラウザ立ち上げてきっちり1msecごとになにかをさせようとしたらちゃん
「入門 JSON」が微妙に評判がいいみたいなので, 今回はもう少し踏み込んだ内容を書いてみたいと思います。 前回では JSON のデータフォーマットについて曖昧な表現や説明のまま流していますが, ここではもう少し厳密に見ていきます。 またもや長文です。 ご注意を。 なお, この記事は「Introducing JSON」(日本語訳)と併せてご覧いただくことをお奨めします。 前回は JSON のデータ型について連想配列(members)と配列(array)の2つがあると説明しました。 しかし実際にはもうひとつオブジェクト(object)という型があります。 実は JSON ではこのオブジェクトがデータの基本になっています。 (説明が長くなるので前回はこの部分についてワザと端折りました) オブジェクトは以下に示すようにブレス記号で囲んだ表現になります。 { } { members } ここで注意
Ruby on Railsなどのフレームワークに標準付属されていて、オブジェクト指向なJavaScriptを書く人たちの間で注目されているprototype.jsですが、Version 1.3.1時点での機能についての解説書は見つけたものの(prototype.js v1.3.1 の使い方)、1.4系で盛り込まれるであろうEnumerableについては見つけることができませんでした。なので、Version 1.4.0_rc4時点でのEnumerableについて解説してみます。 Enumerableとは、配列やハッシュなどのデータ構造に対して繰り返し処理をさせるための機能を集めたものです。たとえば配列に入っている値それぞれについて処理を行いたかった場合、従来ならば以下のように書いていたでしょう。 var data = [1,2,3,4]; for(var i=0; i<data.length
【抜粋】一部省略 var Hash = { _each: function(iterator) { for (key in this) { var value = this[key]; if (typeof value == 'function') continue; var pair = [key, value]; pair.key = key; pair.value = value; iterator(pair); } }, (省略) inspect: function() { return '#<Hash:{' + this.map(function(pair) { return pair.map(Object.inspect).join(': '); }).join(', ') + '}>'; } }いわゆる連想配列を扱うクラスです。Hashクラスも、Enumerableクラスと同
JSONとContent-Type サーバサイドからJSONを吐き出すときのContent-Typeなのですが、各ブラウザによって対応がちょっと違います。 下の表にまとめてみました。 ×のところはeval中にエラーがでます。 Content-type WinIE Firefox Safari Opera(8.5) text/javascript ○ ○ △ × text/javascript; charset=utf-8 ○ ○ ○ × text/javascript; charset=utf8(utf-8の間違い) × ○ ○ × text/javascript+json ○ ○ △ × text/javascript+json; charset=utf-8 ○ ○ ○ × text/html; charset=utf-8 ○ Safariでマルチバイトな文字を含む場合は、「charse
ITMediaで紹介されていた、 Excite RSS Reader (以下 ERR) を 試しに使ってみた。 http://reader.excite.co.jp/ http://www.itmedia.co.jp/bizid/articles/0609/01/news057.html (ITMediaの記事) なんだか、使い勝手がすごい良くて、 まさに vi キーバインドという感じ。 vi使いは、感性のままに操作出来ると思う。 さっそく、Livedoor Reader の OPML を移行してみた。 いや、移行してみようとしたのだが、 実際にはうまく行かなかった。 XML が正しくありません。 というようなエラーが出て ERR側に インポートできなかったのだ。 実は、結構ココではまったのだがどうやら ERR では XMLのサイズが一定の値を超えたときにも、 上記のようなエラー文言が出て
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く