atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
オチャメモ
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
オチャメモ
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
オチャメモ
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • オチャメモ
  • JavaScript-まとめ

オチャメモ

JavaScript-まとめ

最終更新:2008年08月24日 10:47

ochamemo

- view
だれでも歓迎! 編集

オチャメモ

  • TODO
  • 基礎
    • javascriptの型
    • 未定義オブジェクト
    • 数値かどうかのチェック
    • 空のオブジェクト
    • 配列とハッシュ
    • すべてはハッシュ
    • JavaScriptにおけるメンバの定義
    • JavaScriptにおけるメンバの削除
    • for in
    • 可変引数
    • コンストラクタ
    • プロトタイプとは?
    • プロトタイプの仕組み(プロトタイプチェーン)
    • クラス定義
    • クラス継承
    • 関数について
    • NullとUndefined
    • 配列
    • 関数
    • apply()メソッドとcall()メソッド
    • 演算子
    • 等値演算子と同値演算子
    • thisとprototypeどっちで定義すればよいか?
  • 参考リンク
    • 非常に参考になる
    • 読み物系

TODO

  • javaのアクセス指定子の勉強
  • js.jarのjnlpの指定方法
  • js.jarのmavenの指定方法

基礎

javascriptの型

  • プリミティブ系
    • number
      --string
      --boolean
      -オブジェクト系
      --object
      ---Number
      ---String
      ---Boolean
      ---Array
      ---[]
      • null
    • function

未定義オブジェクト

未定義オブジェクトかどうかを判定するには以下の方法がある。

// 以下は全部同義(undefined, !, null)
var hoge;
if (hoge == undefined) {
  alert("未定義(undefined)");
}
if (!hoge) {
  alert("未定義(!hoge)");
}
if (hoge==null) {
  alert("未定義(null)");
}

連想配列の未定義のチェック

var hoges = new Array();
var hoge = hoges["hoge"];
if (hoge == undefined) {
  document.write("未定義");
}

数値かどうかのチェック

if(!isNaN(value)){
  document.write("数字");
}

空のオブジェクト

var Object = {};

配列とハッシュ

var hash = {'java':0, 'script':1};
var array = ['java', 'script'];

すべてはハッシュ

var hello = {};
hello.world = function() { return "hello, world!" };
hello.hoge = 'hoge';

alert(hello.hoge);
alert(hello['hoge']);

alert(hello.world());
alert(hello['world']());

JavaScriptにおけるメンバの定義

var obj = new Object();
alert(obj.field);  // 未定義。未定義の場合 undefined と評価される。
obj.field = 10;    // 代入により field というメンバが定義された。
alert(obj.field);  // 10 と評価される。

JavaScriptにおけるメンバの削除

var obj = new Object();
obj.field = 10;
alert(obj.field); // 10 と評価される。
delete obj.field; // delete 演算子により fieldプロパティが削除される。
alert(obj.field); // 削除され未定義となったため undefined となる。

for in

連想配列からキーを取得できる

var info = new Array();
info["name"] = "hoge";
info["type"] = "cat";
info[0] = "A";
info[1] = "B";

for( key in info ){
    alert( key + ":" + info[key]);
}

for in でオブジェクトのプロパティを列挙できる

var obj = new Object();
obj.foo = 'value1';
obj.bar = 'value2'

for (var key in obj) {
    alert(key + ":" + obj[key]);     // keyにハッシュのキーが入る(プロパティ名)
}

可変引数

argumentsオブジェクトを使うことにより動的にアクセス可能

function hoge(arg1, arg2) {
    alert(arg1 == arguments[0]); // true
    alert(arguments[3]);         // 4
}
hoge(1, 2, 3, 4);


コンストラクタ

// コンストラクタとは関数定義のこと。
var Hoge = function(){};

// だからこれもコンストラクタ。
function Hoge(){};

// で、これをnewしたらHogeオブジェクトのできあがり
var hoge = new Hoge();

// フィールドを定義したい場合は以下のようにthisをつけて代入すればよい
var Hoge = function(){
  this.field1 = 0;
  this.field2 = 'hoge';
};

プロトタイプとは?

  • プロトタイプとはjavaでいうインスタンス。
    -プロトタイプベースオブジェクト指向とはつまりインスタンスベースクラス指向のこと。
    -javaのようにクラスの雛形をもとに静的にクラスを生成するのではなく、インスタンスをベースにクラスを量産するというイメージ。

    **プロトタイプの仕組み(プロトタイプチェーン)
  1. コンストラクトした時点では、prototypeは通常、ただの空オブジェクト。
  2. まずオブジェクト自身のプロパティから、該当のプロパティ名を探索
  3. なかった場合、オブジェクトのprototypeオブジェクトのプロパティの中から該当する名前のプロパティを探す。
  4. それでもなければ、そのプロトタイプオブジェクトのprototypeから探索する。
  5. 最終的になにもプロパティを持たないprototypeになるまでこれを繰り返す。
  6. 見つからなければ、そこで代入になる。参照だったらundefinedのエラーになる
  7. これがプロトタイプチェーン。

クラス定義

this,prototypeに定義したメンバは、newしないと参照できない。
定義した変数に直接メンバを設定するとクラス変数、クラスメソッドとなる。

 var Hoge = function() {
   this.thisField = 10;
   this.thisMethod = function() { return 'hoge'; };
 };
 Hoge.prototype.protoMethod = function() { return 'hogehoge'; };
 Hoge.prototype.protoField = 20;
 Hoge.FIELD = 30; // クラス変数
 Hoge.METHOD = function() { return 'hogehogehoge'; }; // クラスメソッド
 
 var hoge = new Hoge();
 
 // prototypeとthisはnewしないと参照できない
 alert('hoge.thisMethod():'+hoge.thisMethod());  // => 'hoge'
 alert('hoge.protoMethod():'+hoge.protoMethod()); // => 'hogehoge'
 //alert('hoge.METHOD():'+hoge.METHOD());      // => エラー not a function
 alert('hoge.thisField:'+hoge.thisField);    // => 10
 alert('hoge.protoField:'+hoge.protoField);  // => 20
 
 //alert('Hoge.thisMethod():'+Hoge.thisMethod());  // => エラー not a function
 //alert('Hoge.protoMethod():'+Hoge.protoMethod()); // => 同上
 alert('Hoge.FIELD:'+Hoge.FIELD);            // => 30
 alert('Hoge.METHOD():'+Hoge.METHOD());            // => hogehogehoge

クラス継承

prototypeにスーパクラスのインスタンスを設定すればよい。

 // スーパクラス
 var Hoge = function() {
   this.thisField = 10;
   this.thisMethod = function() { return 'hoge'; };
 };
 Hoge.prototype.protoMethod = function() { return 'hoge'; };
 Hoge.prototype.protoField = 10;
 Hoge.FIELD = 10; // クラス変数
 Hoge.METHOD = function() { return 'hoge'; }; // クラスメソッド
  
 // 継承クラス
 var Fuga = function() {};
 // これでFugaのプロトタイプがHogeになる。つまり継承したことになる
 Fuga.prototype = new Hoge();
 var fuga = new Fuga();

 alert('fuga.thisMethod():'+fuga.thisMethod()); // => 'hoge'
 alert('fuga.thisField:'+fuga.thisField);    // => 10
 alert('fuga.protoMethod():'+fuga.protoMethod()); // => 'hoge'
 alert('fuga.protoField:'+fuga.protoField);    // => 10
 // クラス変数へはアクセスできない
 alert('Fuga.FIELD:'+Fuga.FIELD);    // => undefined
 
 fuga.thisField = 20;
 alert('fuga.thisField:'+fuga.thisField);    // => 20 書き換わる
 fuga.protoField = 20;
 alert('fuga.protoField:'+fuga.protoField);    // => 20 書き換わる
 
 fuga.thisMethod = function() { return 'fuga'; };
 alert('fuga.thisMethod():'+fuga.thisMethod()); // => 'fuga' 書き換わる
 
 fuga.protoMethod = function() { return 'fuga'; };
 alert('fuga.protoMethod():'+fuga.protoMethod()); // => 'fuga' 書き換わる
 
 
 // コンストラクタで上書きしたらどうなるか?
 // てかこれが本来の継承
 var Piyo = function() {
   this.thisField = 20;
   this.thisMethod = function() { return 'piyo'; };
 };
 Piyo.prototype = new Hoge();
 var piyo = new Piyo();
 alert('piyo.thisMethod():'+piyo.thisMethod()); // => 'piyo' 書き換わる
 alert('piyo.thisField:'+piyo.thisField);    // => 20 書き換わる

関数について

関数内のthisはグローバルオブジェクトのプロパティを示す。

function add(x, y) {
  this.result = x + y; // これはグローバルのresultを示す。
}
add(2, 5);
alert(result);

NullとUndefined

未定義変数

alert(sValue);  // sValueが前もって宣言されていないため、エラーとなる → sValue is not defined

null変数

var sValue;
alert(sValue); // エラーは起こらないが、undefinedと表示される 

配列

  • 配列
    var hoge = []; // var hoge = new Array(); とも記述できる。
    var hoge2 = [1,2,3,4];
    var hoge3 = [1.1, true, "a"]; // ひとつの配列にどんな型も入れられる。
    
  • push, pop
    var hoges = new Array();
    hoges.push(0); // 配列の最後に追加
    hoges.push(1);
    hoges.push(2);
    while (hoges.length != 0) {
      // 配列の最後を取り出す
      alert(hoges.pop()); // 2, 1, 0 の順番で表示
    }
    
  • unsift, shift
    var hoges = new Array();
    hoges.unshift(0); // 配列の最初に追加
    hoges.unshift(1);
    hoges.unshift(2);
    while (hoges.length != 0) {
      // 配列の最初を取り出す
      alert(hoges.shift()); // 2, 1, 0 の順番で表示
    }
    

関数

  • 関数宣言はコードの実行より前に解釈される。
  • c言語で言うstatic変数を関数内にもつ方法
    uniqueInteger.counter = 0; // 関数自身にプロパティを設定する。
    function uniqueInteger() {
      return uniqueInteger.counter++; // このプロパティは保持される。
    }
    

apply()メソッドとcall()メソッド

f.call(o, 1, 2);

これは次のように記述したのと同じ

o.m = f;
o.m(1,2);
delete o.m;

applyは引数部分を配列で渡す。

f.apply(o, [1,2]);

演算子

基本型をチェックする(typeof)

// number, string , boolean , object, function のいずれかを返す
var hoge = (typeof value == "string"? "moji": "sonota";

オブジェクトの型をチェックする

var d = new Date();
d instanceof Date;   // true 
d inscanceof Object; // true 
d inscanceof Number; // false

等値演算子と同値演算子

  • == は型変換してできるだけ等しくなるようにする。
  • === は型が違えばその時点で、偽になる。
  • ※== が浅い比較、===が深い比較ではないので注意
  • オブジェクト同士の比較
    • ==でも===でも、同じ参照をさしている場合のみ、等しいと判断される。
    • 同じプロパティ、同じ要素を刺して言うことを判定するには個別にチェックしなくてはならない。
  • nullとundefined
    • ==では、nullもundefindeもnull(false)と判定されるが、===ではより厳密になるため、両者は区別される。

thisとprototypeどっちで定義すればよいか?

  • this
    --プロパティが上書きできてしまうので好ましくない
    • インスタンスごとにメソッドを定義するのでメモリ効率がよくない
  • prototype
    --prototyepのプロパティはそれを介したインスタンスで共通に参照される
    • したがってメモリ効率がよい
    • とくにメソッドはprototypeに定義したほうがよい。
var Class = function(){
  this.hoge = 0;
  this.fuga = function() {
     alert('fuga');
  };
};

// 
var Class = function(){
  this.hoge = 0;
  this.prototype.fuga = function() {
     alert('fuga');
  };
};

参考リンク

非常に参考になる

  • JavaScriptにおけるオブジェクトの基本的性質
    -JavaScriptの関数とメソッド
    -プロトタイプ(prototype)によるJavaScriptのオブジェクト指向

読み物系

  • javascriptを理解するためのたった2つの大切なこと
    --http://anond.hatelabo.jp/20070620200618
    --http://anond.hatelabo.jp/20070622101313
    -
    四則演算を JavaScript で実装する
    --http://d.hatena.ne.jp/nitoyon/20070629/four_operations_implementation_in_javascript
    -JavaScript:
    世界で最も誤解されたプログラミング言語
    --http://d.hatena.ne.jp/brazil/20050829/1125321936
    -
    私は如何にしてJavascriptのprototypeを身につけたか。
    --http://blog.xole.net/article.php?id=560
    -
    かつてサーバーサイドJavaScriptは実在した
    --http://neta.ywcafe.net/000573.html
    -Rhino
    on Rails
    --http://www.aoky.net/articles/steve_yegge/rhino-on-rails.htm
「JavaScript-まとめ」をウィキ内検索
LINE
シェア
Tweet
オチャメモ
記事メニュー

メニュー

  • Tips
  • まとめ
  • ハマリ
  • 本
  • その他
  • このwikiのページ一覧

リンク

  • ブログ
  • OCHAGL
  • Wiki文法

アクセス数

  • 本日: -
  • 昨日: -
  • 全体: -


ここを編集
記事メニュー2

更新履歴

取得中です。


ここを編集
最近更新されたページ
  • 6157日前

    C言語-まとめ
  • 6160日前

    Emacs-Tips
  • 6161日前

    Python-まとめ
  • 6163日前

    Python-Tips
  • 6165日前

    GoogleAppEngine-Tips
  • 6165日前

    VMWare-Tips
  • 6165日前

    Windows-Tips
  • 6165日前

    Linux-Tips
  • 6166日前

    Screen-Tips
  • 6168日前

    トップページ
もっと見る
「まとめ」関連ページ
  • No Image ActionScript-まとめ
  • No Image JavaScript-勉強会
  • No Image PHP-まとめ
  • No Image C言語-まとめ
最近更新されたページ
  • 6157日前

    C言語-まとめ
  • 6160日前

    Emacs-Tips
  • 6161日前

    Python-まとめ
  • 6163日前

    Python-Tips
  • 6165日前

    GoogleAppEngine-Tips
  • 6165日前

    VMWare-Tips
  • 6165日前

    Windows-Tips
  • 6165日前

    Linux-Tips
  • 6166日前

    Screen-Tips
  • 6168日前

    トップページ
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. MadTown GTA (Beta) まとめウィキ
  2. AviUtl2のWiki
  3. R.E.P.O. 日本語解説Wiki
  4. しかのつのまとめ
  5. シュガードール情報まとめウィキ
  6. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  7. ソードランページ @ 非公式wiki
  8. SYNDUALITY Echo of Ada 攻略 ウィキ
  9. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  10. ドラゴンボール Sparking! ZERO 攻略Wiki
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. 発車メロディーwiki
  6. 検索してはいけない言葉 @ ウィキ
  7. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  8. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
  9. オレカバトル アプリ版 @ ウィキ
  10. モンスター烈伝オレカバトル2@wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 参加者一覧 - ストグラ まとめ @ウィキ
  2. 千鳥の鬼レンチャン 挑戦者一覧 - 千鳥の鬼レンチャン サビだけカラオケデータベース
  3. 召喚 - PATAPON(パタポン) wiki
  4. ロスサントス警察 - ストグラ まとめ @ウィキ
  5. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  6. ステージ - PATAPON(パタポン) wiki
  7. 犬 ルリ - ストグラ まとめ @ウィキ
  8. ステージ攻略 - パタポン2 ドンチャカ♪@うぃき
  9. 鬼太郎誕生 ゲゲゲの謎 - アニヲタWiki(仮)
  10. 鬼レンチャン(レベル順) - 鬼レンチャンWiki
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.