JavaScript のインタラクティブシェル

先週から JavaScript の勉強をしています。
JavaScript は、オブジェクト指向機能を備えたインタプリタ型のプログラミング言語です。一般的に JavaScript と言うと、Web ブラウザに組み込まれていて実行されるものとして使われています。厳密には、言語としての汎用機能をコア JavaScript、コア言語を拡張して Web ブラウザ上で動作するものをクライアントサイド JavaScript と呼ぶそうです。

勉強していて、こういうコードはどう動くのかなと試してみたい欲求は度々出てきます。そんな時にコードを書いて、わざわざブラウザをリロードして動作確認するのは面倒ですよね。そこで JavaScriptインタラクティブシェルとして SpiderMonkey をインストールして、ちょっとしたコードを実行します。SpiderMonkey は、Fedora では js というパッケージ名になるので、SpiderMonkey で検索してもヒットしません。

ここでは CentOSyum で js パッケージをインストールします。

# yum --enablerepo=epel -y install js
# rpm -qi js
Name        : js                           Relocations: (not relocatable)
Version     : 1.70                              Vendor: Fedora Project <http://bugzilla.redhat.com/bugzilla>
Release     : 3.el5                         Build Date: 20090128090106秒
Install Date: 20090809150254秒      Build Host: xenbuilder2.fedora.redhat.com
Group       : Development/Languages         Source RPM: js-1.70-3.el5.src.rpm
Size        : 887408                           License: GPLv2+
Signature   : DSA/SHA1, 20090130045244秒, Key ID 119cc036217521f6
Packager    : Fedora Project <http://bugzilla.redhat.com/bugzilla>
URL         : http://www.mozilla.org/js/
Summary     : JavaScript interpreter and libraries
Description :
JavaScript is the Netscape-developed object scripting languages.
This package has been created for purposes of Sablotron and is suitable
for embedding in applications.

Fedora EPEL の設定方法は以下の冒頭を参照してください
(第1回)Zope/Plone開発勉強会 - forest book

ホスト上で実行してみます。
JavaScript にも同値演算子(===)があるのを初めて知りました。

js> var v1 = 123;
js> var v2 = "123";
js> if (v1 == v2) print("true"); else print("false");
true
js> if (v1 === v2) print("true"); else print("false");
false

JavaScript のオブジェクトはプロパティへのアクセスに対して、識別子とドット演算子(.)を用いる方法と、連想配列として文字列を用いる方法の2種類があります。配列表記を用いることで、柔軟性の高いプログラムを書くことができます。あらかじめ分かっているプロパティは識別子としてアクセスして、動的に追加したいプロパティやプログラムで操作したいプロパティを配列表記でアクセスするのかなと思います。

# js               
js> var obj = {x:1, y:2};
js> obj
[object Object]
js> obj.x
1
js> obj["x"]
1

js> var range = [4,5,6];
4,5,6              
js> for (i in range) {
       obj["attr" + i] = range[i];
    }
6
js> print(obj["attr0"]);
4
js> print(obj["attr1"]);
5
js> print(obj.attr2);
6

自分の頭の中にイメージしたことを「ちょっと」実行して動作を確認してみるというのは楽しいです。

リファレンス:
wikipedia:SpiderMonkey
SpiderMonkey | MDN
SpiderMonkey で JavaScript のインタラクティブシェル - bkブログ

JavaScript 第5版

JavaScript 第5版