僕は木になりたい。。。

子供のとき本気でそう思ってました。 理由は樹齢が長いから

JavaScript

JavaScriptの文字列と数値の比較3

以下のようなjavascriptの結果が、trueになった
ちょっと調べてみた。
alert("" == 0)); // 結果はtrue
最初は、""と0がそれぞれ論理値に変換され、 false == false でtrueになっていると思った。
【2009/10/20 追記】 上記の推測で正しい。 なので以下の記事はウソというか、間違った方向に向かってしまった。。。 数値に変換する関数 parseIntを使った場合
alert(parseInt("", 10) == 0 ); // 結果はfalse
これは、parseInt("", 10 )が NaNになるので、falseになってしまう。
Numberコンストラクタを使用すると、
alert(Number("") == 0 ); // 結果はtrue
確かに、alert(Number("")); は0を返す。
これで、意味が合う。
文字列が、数値との比較で使われる場合は 本当に、Numberが使われるのだろうか。。。
あ、あと開発する人達は、JavaScriptでも型を意識しようね!!。

Javascriptの勉強 new3

JavascriptにもJavaと同様にnewという演算子で、 インスタンスを生成できる。

ただし、Javaの感覚で使っていると どうも正しい理解につながらないと感じ、 JavaScriptのnew 演算子とできるだけ同じ動作をするように 自作new関数を作ってみた。

まずは、new演算子って何が行われるの?

  • Objectクラスのインスタンスを生成し、
  • そのオブジェクトをレシーバーにし、クラス定義関数を適用する。
  • constractorプロパティを置き換える
↑これが今の自分の理解です。(多分足りないけど)

で、以下がそれに忠実に作ってみた 自作new関数です。

// 自作 new関数
function new( cf )
{
   var obj = {};
   cf.call( obj );
   obj.constractor = cf;
   return obj;
}
こんな感じ。

使ってみる。

// Docクラスを生成
function Doc()
{
 this.name = "pochi";
}
Doc.prototype.call = function(){ alert( this.name ) };

// 標準の方法でインスタンス生成
var doc_obj = new Doc();

// 自作new関数でインスタンス生成
var my_doc_obj = new( Doc );
標準の方法と、自作newの二通りの方法でインスタンスを生成。

呼び出してみる。

doc_obj.call();
my_doc_obj.call();
"pochi"が無事アラートされてます。
とりあえず、まずは感じ。

全然足りないとは思うけど、 雰囲気はつかめるかな もうちょい勉強してみよ。

JavaScript 第5版4

JavaScript 第5版


JavaScriptについての勉強で読みました。
何か言語を勉強しようとするときに、
Tips的な本を読む人を良く見かけますが、
読みやすいからなんですかね。
こういう言語仕様について書かれている本を
読むのが、絶対早道です。

本当は英語で原書を読めるのが一番なんだろうけど、
英語で読むと、残念ながら読むことで精一杯で、
理解までいかない。

JavaScriptをもっと知りたい、
もっとプログラム書きたい!!
と思わせてくれる。
内容たっぷりの本です。

JavaScriptを勉強中1

JavaScriptを猛勉強中です。

プログラム言語を学ぶというは、 ゴールを定めるのが難しいと思った。

簡単に動くアプリ程度なら、 他の言語を身に付けている人なら、 学ぶまでも無く、APIリファレンスか何かを見ながら 作れると思う。

よく 「言語なんて関係ないんだよ。」 という話を聞きます。 僕も人に何度となく言った覚えがあります。

でも、それって 学ぶ事に対して、思考停止状態だと思う。

プログラム言語と言うのは自然言語と違って、 誰かが意図をもってそいいう言語体系になっている。 そして多くの言語は利用者からのフィードバックがあれば、 変化(成長)していく事もある。

だから、それらプログラム言語を学ぶという事は その言語体系の意図や背景を理解する事がすごく重要だし、 面白い所だと思う。 弱点も含めて。

という事で、上記とはあまり関係ないですが。 JavaScriptの以下のコードについての疑問

Ajax - Recollab郵便番号検索+Google Map
var zip2address = (function(callback){
  this.proxy     = 'http://zip.ricollab.jp/';
  this.callback  = callback || 'jsonp';
  this.parse = function(zip){
    var script = document.createElement('script'); 
    script.id = this.proxy + '/' + zip + '.json?callback=' + this.callback;
    script.charset = 'UTF-8';
    script.src = script.id; 
    document.lastChild.appendChild(script);
  };
  return this;
})();

最初のfunctionの仮引数 callback は意味あるのか? ここにcallback関数を渡す事は可能なのか?

明日になったら理解できて、ここに書いたのが恥ずかしくなるかもしれないけど、そうなった時は成長した時!。

livedoor プロフィール
記事検索
読書をしよう
楽天市場
こちらもどうぞ
Archives
RSS
  • ライブドアブログ