JavaScript
知らなかった。下記のコードはOKだと思ってた。 int[] i; i = {1,2,3}; // コンパイルエラー 正しくは無名配列を使う。 int[] i; i = new int[]{1,2,3}; SJC-Pの試験対策で配列の勉強をしていた時、説明に違和感を感じていたんだよなー。多分、このことに気…
これまでJavaScriptの言語仕様について勉強してきたので、Javaとの相違点を整理しておきたい。 コンストラクタ これは似ている。 コンストラクタに対してnew演算子を使う点は同じ。Javaの場合は、クラス定義内のコンストラクタを呼び出す。それに対して、Jav…
次の2つの継承がある。 クラスベースの継承 プロトタイプベースの継承 Javaを知っている人なら、クラスベースの継承に馴染みがあるはず。 Javaの場合 public class Super{ public void print1(){ System.out.println("super1"); } public void print2(){ Sy…
匿名関数を定義して即実行する。 (function(){ // ここにコード })(); jQueryも同様のコードになっている。
JavaScriptにはそもそも「クラス」という概念はないけど、prototypeを使用して同じようなことができる。 この章で学ぶべきことは new演算子で関数を呼ぶとオブジェクトが作成されること そういう関数をコンストラクタと呼ぶこと new演算子でオブジェクトを作…
定義時のスコープと、実行時のスコープが異なり、関数内の変数を定義時のスコープで解決する関数。
関数スコープは、動的ではなく、静的であるということ。スコープチェーンは定義時に決まり、実行時には決まらない。それを認識できていなかったんだけど、わかりにくくしている原因は、「this」だった。thisが参照するオブジェクトは、動的に、実行時に決ま…
「関数本体+スコープ」ってことね。理解したぜ! いや嘘。スコープ? スコープチェーンといった方がいいのかな。 function f(x){ return function c(y){ alert(x + y); }; } var c1 = f(1); var c2 = f(2); c1(2); // 3 c2(2); // 4 alert(c1 === c2); // f…
オブジェクト:値に名前を付けたものの集まり 配列:値にインデックスを付けたものの集まり 7.1 オブジェクトの生成 オブジェクトリテラル var obj = {}; // 空のオブジェクト → new Object()と同じ var ken = {name:'ken', age:31}; 7.2 オブジェクトのプロ…
コンピュータに対する命令を文という。副作用を伴わない式は、基本的には文ではない。たとえば下記。 1 * 2; 代入演算子を伴うものは、左辺の変数の値を変更する副作用を伴うので、文といえる。 var x = 1 * 2; 6.1 式文 代入演算子を伴う式は、文であり、式…
「変数名の解決」(変数名を探す方法)について。 スコープチェーンはオブジェクトを並べたもの。下記コードのf2関数内では、 「f2のCallオブジェクト」 →「f1のCallオブジェクト」 →「グローバルオブジェクト」 という順でスコープチェーンが並んでいる。 v…
オブジェクトのプロパティと変数は同じもの!! 4.6.1 グローバルオブジェクト JavaScriptインタプリタが起動するとグローバルオブジェクトを生成する。 グローバルオブジェクトのプロパティがグローバル変数になる。 グローバル変数を宣言すること=グロー…
Javaと同じ。インタプリタがメモリの割り当て/解放を管理してくれる。
今日もJavaScript 第5版の勉強。JavaScriptの勉強が面白くなってきたぜぃ。
基本型と参照型のメモリの使い方。 型 メモリの大きさ 備考 数値型 8バイト固定 なし 理論値 1バイト固定 なし オブジェクト 任意 なし 関数オブジェクト 任意 コードに制限はない 配列オブジェクト 任意 要素数に制限はない オブジェクトのメモリ量は任意な…
今日もJavaScript 第5版の勉強。少しずつJavaScriptの仕様がわかってきたぜぃ。
変数 スコープ グローバル変数 プログラム全体 ローカル変数 関数(!)内 関数内では、グローバル変数よりローカル変数が優先される。 4.3.1 ブロックレベルのスコープはない ブロックレベルのスコープがない!!!(Javaにはある) ローカル変数は関数全体…
キーワードvarで変数を宣言する 宣言しないと変数を使用できない 複数の変数を同時に宣言できる 初期化も同時に行える 宣言だけして初期化しないと、代入されるまで未定義値(undefined)になる。 var a, b; // 複数宣言可 var a = 1, b = 2; // 複数初期化も…
下記の場合、「値による」手法と、「参照による」手法で結果が異なる。 // 下記は、「値による」のか? 「参照による」のか? ということ。 x = y; obj.meth(x); x == y; では、JavaScriptではどうなのか。 3.15.1 基本型と参照型 基本データ型は基本型、オ…
オブジェクトは、理論値コンテキストではtrueになる。だから、下記に注意のようなコードに注意。ラップ対象が理論値falseであったとしてもBooleanオブジェクトはオブジェクトであるので、理論値コンテキストではtrueになる。 if(new Boolean(false)){ alert(…
基本データ型 ラッパーオブジェクト 理論値 Boolean 文字列 String 数値 Number 下記コードでは、s.lengthの時に一時的にStringオブジェクトが作成される。 なぜなら、sは基本データ型であるので、そもそもメソッドなどない。Stringオブジェクトに一時的に変…
まとめただけ
ECMAScript v3で、いくつかのエラーオブジェクトが定義されている 実行時にエラーが発生すると、JavaScriptインタプリタがエラーオブジェクトをthrowする。 エラーオブジェクトはmessageプロパティを持つ。 messageプロパティの内容は、実装による。 Error, …
リテラル構文あり! 詳細は11章で。
JavaScript クイックリファレンス 第5版を参照しろと。
未定義値とは、 宣言されているけど、初期化されていない変数 未定義のオブジェクトプロパティ のこと。ちなみに、宣言されていない変数を参照したら実行時エラーが発生する。 下記、nullとの比較 alert(null == undefined); // true alert(undefined == nul…
値がないことを表す オブジェクト型 変数がnullの場合は、基本データ、オブジェクトが格納されていないことを表す
データ値の集合 データ値にはインデックスが付けられている。 インデックスは0を起点にして数える 例えば、1番目の要素は、arr[0]で表わせる。 インデックスは正の整数(連想配列は文字列) 配列の配列は可能(多次元配列はサポート外) 異なるデータ型の要…
「オブジェクト=連想配列」のようなもの。 「オブジェクトのプロパティ=連想配列のキー」 プロパティには、オブジェクト名.プロパティ名で参照可能。 プロパティは、変数と同じような働き。(オブジェクトが持つ変数だよな。) document.form1.button1 と…
Javaとの違いは、関数がデータ型であることで、引数として他の関数に渡したりすることができる。そういうところが面白いし、少ないコードで多くの処理を実装できるのは、関数をデータとして扱えるからなんだろうな。この点と、動的にプロパティを追加できる…