トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
JScript
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索
___

■ SYNTAX



___

■ 基本的なこと

JavaScript は statement-set statement 1つ以上の式やキーワード、演算子などから成る 終端には、[ ; ]をつける ie. [;] がステートメントの終わり Sensitive( 大文字, 小文字 のちがいあり)
  
    // ERROR
    var s = new string;

    // OK
    var s = new String;


___

■ コメント(Comment)

Comment は評価されないが, Read されるので処理が重くなる ( Interpreter が評価するため )
  
  // comment 

  /* comment */

___

■ Function.関数

// 定義する場所は call する前ならばどこでも良い // < head>〜< /head> 間 | 外部ファイル function func(hour, min, sec) { var ret = hour * 3600 + min * 60 + sec; return( ret ); } // call ret = func(12, 34, 56);
___

■ 無名関数

    addHandler (  function() {  } );
___

■ 変数(Variable)

DESC JScript の変数のスコープは 3 つ

  // 関数定義の中で変数を宣言するとローカル変数
   ローカル


  // クラス定義内なら クラスローカル変数
   クラス


  // それ以外の場所なら グローバル変数
  //  プログラム内のどこでも値を参照, 変更ができる
   グローバル


ローカル変数 関数が実行されるたびに生成 関数をぬけると破棄 関数の外部からは、変数にアクセスできません GUIDELINE 同一名は利用しない WARNING C++ のような BlockScope は使えない 関数内の i は同じ
    // 3 * 3 = 9 回のループにはならない
    function foo()
    {

      for( var i=0; i< 3; i++ ){
        WScript.echo( "oya " + i );

        // BlockScope はなし
        if (0) {
          for( var i=0; i< 3; i++ ){
            WScript.echo( "kodomo " + i );
          } 
        }
        else {
          for( var j=0; j< 3; j++ ){
            WScript.echo( "kodomo " + j );
          } 
        }
      } 

    }
ローカル変数が宣言されている関数の中では "ローカル変数だけ" が見える Local変数は, Global変数をかくす ( "参照可能範囲" という )

    // Global 変数
    var aNumber = 100;


    // 変数の宣言は Code の実行前に 処理される
    function tweak() 
    {

      // 外の "aNumber" のつもりだが, 関数内の "aNumber"
      var s = "aNumber is " + aNumber;
      return s;

      if (false)  {
        // この宣言は, 外の "aNumber" をかくす( 上書きする )
        var aNumber;      
        aNumber = 123;    
      }

    }



    // 先に b というシンボルの宣言を処理するので, ここでは落ちない
    print (b);

    // この行まできて, "bbb" が代入
    var b = "bbb";

    // RET: bbb
    print( b );

    // ------------------------------------------------------

    // EEROR
    //    "bは宣言されていません"
    print (b);

    // この行まできて, "bbb" が代入
    b = "bbb";

    // RET: bbb
    print( b );

    // ------------------------------------------------------

    print (b);

    function() {

    // BlockScope はないので, "b" は Global Scope
    if (0) {
      var b = "bbb";
    }

    print ( b );

    // ------------------------------------------------------


    POINT
       宣言 と 代入は別
       宣言されていれば, Symbol がない といわれない
       代入されるのは, Code の実行順
      


変数および定数をすべて検出した後、関数内のコードが実行される ローカル定数の値は、定数の宣言ステートメントが実行されるまで未定義です 関数で変数への代入が実行されるまでは、変数も未定義です JScript では 変数と定数の宣言はすべてコードの実行前に処理される 宣言が条件ブロックや他の構造の内部にあるかどうかは処理には関係なし 変数, 定数をすべて検出した後 関数内のコードが実行される ローカル定数の値は 定数の宣言ステートメントが実行されるまで未定義 また、関数で変数への代入が実行されるまでは、変数も未定義

  function isEnvVista()
  {
    var ret = 0;

    var sh = new ActiveXObject("WScript.Shell");
    var WshEnvironment = sh.Environment("Process");

    // これは 関数内 のみの Scope 
    var val = WshEnvironment.item("HOMEPATH");


    if ( val.search(/Documents and Settings/) >= 0 ) {
      WScript.echo ( "env is XP" );
    }
    else {
      WScript.echo ( "env is VISTA" );
      ret = 1;
    }

    return ret;
  }


  print( isEnvVista() );


  // val は宣言されてません ( Runtime Error )
  print( val );

___

■ Include

DESC Include という構文がないため eval() で代用する eval は引数に渡された文字列を Interpreter で Code として評価する WARNING eval で評価する 文字列( code ) では file 操作が禁止になる file 操作の関数は module にしないこと TIP 変数は File 単位でとじる C, C++ のように File をまたいで共有することはない main 側で module にあたるファイルを Include( Eval )する

  // 共通の module を Include( Eval )する
  eval( new ActiveXObject("Scripting.FileSystemObject").OpenTextFile("d:/common.js", 1).ReadAll() );
___

■ 演算子

SYNTAX !exp DESC 式の論理否定
  
  //var b = true;
  var b = false;

  print( !d );
  if ( !d ) {
    print("true");
  }


  // undefined はだめ
  d=0;


   // increment, decrement
   var i = 0;

   // 後置
   i ++;

   // 前置
   ++ i;

___

■ cast(キャスト)

明示的にキャストするには 型の識別子の後に式をかく
    // string
    var s = String( 123 );

    // number
    var n = Number( "123" );
文字列と 数値の比較 OK
  if ( 10 == "10" )
  {
    WScript.echo("aaa");
  }
___

■ Bit(ビット演算)


   var n = 8;
   if ( n & 1 ) {
     WScript.echo( "flag ON" );
   }
   else {
     WScript.echo( "flag OFF" );
   }

___

■ type(typeof)

SYNTAX typeof( exp ) DESC 型情報を文字列で返す "number""string""boolean""object""function""date""undefined""unknown"

  // string
  var y  = "Hello";

  // object 
  var z = new Array();


  // 未初期化の変数は "undefined" がかえる
  if ( typeof ( gObj ) == "undefined" ) {
    print( "not init" );

    gObj = {};

    // object
    print( typeof( gObj ) );
  }

  // Array は object
  {
    var a = ["aaa"];
    print( typeof( a ) );
  }

___

■ object

DESC すべての Object の基本型
  
  // in 演算子
  if ( "prop" in obj ) {

  }

  
  // 文字列をかえす
  string Object::toString();

  // Function 型 Object "foo"
  function foo() {
    WScript.echo("foo");
  }


  WScript.echo( foo.toString() );


toString() をすると val の配列が返る
    a = ["a", "b", "c" ];

    // a,b,c
    a.toString();
___

■ null

DESC Object がないことをあらわす Object
___

■ undefined

DESC


   //var x = 10;

   // 未定義 | 未初期化の変数を調べる
   // 
   if ( typeof( x ) == "undefined" ) {
     print("undefined");
   }
   else {
     print("defined");
   }




NINJAIDX 1