僕は木になりたい。。。

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

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"が無事アラートされてます。
とりあえず、まずは感じ。

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

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