JavaScript には基本的にブロックスコープというものが存在しない。どうしてもブロックスコープを扱いたいときは function 式を使ったりする。 var a = 10; { var a = 20; print(a); // 20 } print(a); // 20 var a = 10; (function () { var a = 20; print(a); // 20 })(); print(a); // 10 だがやはりブロックスコープがあったほうが便利ということで JavaScript 1.7 では let 式、let 文、let 宣言が導入される。 var a = 10; let (a = 20) { print(a); // 20 } print(a); // 10 しかしこれでは対応するブラウザが Firefox 2 以降などに限られる。ところが、with 文とオブ
Thomas Fuchs, author of the script.aculo.us user interface JavaScript library, a member of the Prototype core team and a Ruby on Rails core alumnus. Thomas Fuchs氏が6 easy things you can do to improve your JavaScript runtime performanceにおいてJavaScriptの実行パフォーマンスを改善するための6つのテクニックを紹介している。Thomas Fuchs氏はscript.aculo.usの開発者であるとともにPrototypeコアチームのメンバーも務めている。またRuby on Railsでコアチームで開発を担当していたこともある。 JavaScriptエンジン
ごく普通のナル終端文字列 "123" を整数値の 123 に変換するとき、あなたはどんな方法を用いるでしょうか? 学校の課題でもないかぎり、1文字ずつ取り出して数字かどうかを判別し、数字なら取り出した文字から '0' を引いた値を元の値に 10 倍したものに加えていく...といった処理をわざわざ書くことはないでしょう(組込み用途のフリースタンディング処理系やライブラリ自体の開発の場合は別ですが)。 上記のような変換を行う場合、atoi 関数を使っていることが少なくないと思います。しかし、本当にそれでよいのでしょうか? atoi というのは、元の文字列が正しい書式で、しかもオーバーフローが起きない場合にのみ正しく動作します。そうでない場合、エラー検出を行うことがまったくできません。特に、オーバーフロー発生時には未定義の動作を引き起こします。こんな危険な関数を使ってよいはずがありません。 この
Account Suspended This Account Has Been Suspended
よく見かけるコードですが、上のコードは、必ずしも期待した結果になるとは限りません。なぜなら、double 型やポインタ型は、これらを構成する全ビットが 0 になったとしても、オブジェクトの値が 0 になるかどうかは分からないからです。 確かに、ほとんどの処理系では上記のコードでも問題なく、そして期待通りに動作します。しかし、それはあくまでも"たまたま"動いているに過ぎません。そうした不安定な要素をなくすために行った初期化が、かえってコードを怪しくしてしまっているのです。 単に、集成体の全要素をゼロクリアしたいだけであれば、 とすれば十分です。こう書くと、おそらく次のような反論が返ってくることでしょう。「その方法では、構造体の詰め物がゼロクリアされない」と。しかし、構造体の詰め物にアクセスして、言語仕様上保証される結果を期待することには無理があります。 構造体の詰め物をゼロクリアしたい理由は
はじめに JavaScriptは簡単な言語のようでいて、実は奥が深く、初心者にとってなかなかその本質がわかりにくい言語です。ここでは、JavaScriptの言語的エッセンスを理解できるようなものをFAQ形式で書いてみました。ご意見や誤り等を指摘してもらえたら嬉しいです。 なお、JavaScriptの標準化であるECMAScriptは、今年末にEdition 5 がリリースされる予定です。このFAQは、現在のバージョンであるEdition 3をベースにしています。 ECMAScriptって何ですか? ECMAはEuropean Computer Manufacturer Association(欧州電子計算機工業会)の略で、標準化団体です。NetscapeのJavaScriptとMicrosoftのJScriptをベースに、純粋なプログラム言語部分を抽出したものをECMAで標準化したスクリプ
Firebugでインデントつきのソースを書くのは厳しいことに気づいた。 ある程度長いプログラムを書くときはエディタでやろうと思い、エディタってどんなものがあるのかなーと調べたら、vimというのがかっこよかったので、インストールした。 さらに調べ、autocomplpop.vim - vimグループというものを見つけた。 JavaScriptではomni補完ができないので、辞書ファイルを用意したのだが、あまり賢くなかった。 ので、ソースをいじってJavaScriptでもomni補完をできるようにした。 vimには詳しくないので手探り。もっといい方法があるかも。 まず、autocomplpop.vimの371行目あたりに、 \ 'ruby' : [ という行があるので、その前の行に \ 'javascript' : [ \ { \ 'command' : "\<C-n>", \ 'patter
Comments» 1. 本日のTwitter 2009-01-18 | memoMania - 2009-1-19 […] Web屋のためのVim設定・Tipsまとめ 1/2 - ナレッジエース http://blog.blueblack.net/item_340 # […] 2. ゲスト - 2009-1-19 (ただ、私の環境だとたまに、実行時にDOS窓が残ってブラウザを閉じるまでファイルが編集不能になる現象が発生します。なぜだろう。) firefoxの前にstartを入れるとどうでしょう? 3. nase - 2009-1-19 ありがとうございます!動作確認できました。よけいなDOS窓が開かなくなって、いい感じです。本文も修正させてもらいました。 4. sasata299's blog - 2009-2-6 vim環境を晒してみる… いきなりですが、僕はvi派です。emacsは・
下記なんかを使っていると、オブジェクトの永続化っていう名目で、GM_setValueで保存しまくりなので、ここで削除方法を書いてみます。 Enjoy*Study - del.icio.usをインクリメンタルサーチ(Greasemonkey版)を作ってみました (2006/11/30 更新) ロケーションバー(URLバー)に「about:config」と打ち込んで、リターン。 設定値の一覧が表示されるので、フィルタに「greasemonkey.scriptvals.」と入力。 これで、GM_setValueで設定した項目に絞られて表示される。 なお、設定名は「greasemonkey.scriptvals.@namespace/@name.項目名」といった形式。 消したい設定を右クリックし、「リセット(R)」を選択。これで、状態が「初期設定値」となる。 ブラウザを閉じると、その時点で「リセッ
値が下限値を下回ったら、上限値を超えたら、という処理を以下のように書くことがよくありますが // 下限 int a = 10; for (;;) // ループ条件はとりあえずなんでもいい { --a; if (a < 0) a = 0; } // 上限 int a = 0; for (;;) { ++a; if (a > 10) a = 10; } std::minとstd::maxを使うとスッキリ書けたりします。 // 下限 int a = 10; for (;;) { a = std::max(a - 1, 0); } // 上限 int a = 0; for (;;) { a = std::min(a + 1, 10); } でもこれだけだと、下限に達したとき、上限に達したときに何か処理をさせたい場合に不便なので 以下のように、minとmaxを拡張した関数を用意しておくと便利です。
前回、「iframe」タグを用いたメニューの作成方法をご紹介しました。この方法だとIEでも後ろの「select」タグがきちんと隠れるように表示できます。 しかし、この方法だと「div」タグを使用した方法のように表示のサイズをないように応じて動的に変更させたい場合には、うまくいきません。 今回は、それを回避できる方法をご紹介したいと思います。ただし、この方法はIE以外ではあまりうまくいかないのでブラウザごとに処理を分けてIEでのみ実施したほうがいいです。 方法といってもそれほど難しい方法ではなく単純に「iframe」タグの中身を動的にJavaScriptで書き換えるのと「iframe」タグのスタイルで「width」と「height」に値をあたえて大きさを調整するといった方法です。 では、実際のサンプルです。メニューは、サブメニューのリンクをクリックして閉じてください。 HTMLの内容 <
Flash Developは、フリーの中で最強と言っても過言ではないほど、FlashとAIRの開発環境が整っています。ただし、Windows環境下で.NET Framework 2.0以降がインストールされている必要があるので注意が必要です。また、プロジェクトをビルド(またの名は「コンパイル」、「パブリッシュ」)するにはFlex SDKが必要になります。 無料でFlashやFlashベースのAIRが開発できてしまうなんて、いい時代になったもんです。(FlashがまだMacromedia製品だったときは、Flashの製品版を購入しないとswfにコンパイルできませんでした。) ただ、このFlash Developにはちょっと問題もあって、デバッグ機能がありません。例外をスローしてもコンソール出力されないばかりか、Flashではお馴染みのtrace()すら使えないんです。こりゃ困った。ということ
追記: 以下の方法はFirefoxでXMLHttpRequestのクロスドメインのセキュリティ制限を回避する(無視する)方法ですが、Firefoxでしか使えずかつJSのコードに変なものを書かないといけないので、単純なデバッグ・実験用途にしか使えないです。それに、サービス側がJSONPに対応していればそれを使うし、JSをロードするドメインのサーバに簡単なリバースプロキシを用意するとクロスドメインではなくすることがすぐ可能なので、FirefoxでPriviledgeManagerをごにょごにょするより、最初からFirefox以外でも通用する方法をとった方が、二度手間にならなくて楽だと思います。 Livedoor Readerをちょっといじいじしてみようと思いつきで始めた。(Ajax初心者) トップのHTMLと、そこからロードされるたくさんの*.jsを wget (-k でざっくりリンク変換しつ
Multi-line JavaScript これは必見!JavaScriptの文字列を複数行で定義する方法。 以下のようなコードは動くようで、うまく動きません。 <script type="text/javascript"> <!-- var a = '1 2 3'; alert(a); //--> </script> これを、行末に ¥ を入れます。 <script type="text/javascript"> <!-- var a = '1¥ 2¥ 3'; alert(a); //--> </script> すると、 と動くようです。 文字列の途中で改行したい場合に、一旦区切って 'aaa'+(改行)+'bbb' みたいにしなくてよくなります。 ということで、私も知らなかったのですが、知っておくとよいかもしれませんね。 firefox,ie,chromeで動作確認。 知ってた方はごめ
書いとかないと忘れそうなのでメモ gcc の basic_ios は以下のような operator void* と operator! を持っているので //@{ /** * @brief The quick-and-easy status check. * * This allows you to write constructs such as * "if (!a_stream) ..." and "while (a_stream) ..." */ operator void*() const { return this->fail() ? 0 : const_cast<basic_ios*>(this); } bool operator!() const { return this->fail(); } //@} 以下のように if (in.read(buf, size)) // o
C++でvolatile修飾された構造体はものすごく扱いにくい。 typedef struct { int x; } X; int main() { X n_1; volatile X v_1; /* コピー(代入ではない)*/ X n_2 = n_1; /* OK */ X n_3 = v_1; /* エラー */ volatile X v_2 = n_1; /* OK */ volatile X v_3 = v_1; /* エラー */ /* 代入 */ n_2 = n_1; /* OK */ n_3 = v_1; /* エラー */ v_2 = n_1; /* エラー */ v_3 = v_1; /* エラー */ return 0; } このコードはC++では大量のエラーが出るが、C言語ではコンパイルが通る。おそらくCとC++の非互換性の一つではないかと思われる。 原因はC++のデ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く