JavaScript Diary

厳格な JavaScript に・・・ [ 2001/09/15 ]
↓の続きです。エラーが出る行は
String.prototype.indexForByte = function( start, byte ){
となっています。この文のどこに間違いがあるんでしょうか?
String クラスに prototype したのがマズイんでしょうか?
答えは 引数の名前に byte を使用していること です。
JavaScript は引数の型の指定を必要としませんが、他の言語は大概必要です。例えば、
function hoge( int n, double p )
ってな感じです。この場合、n は整数、p は実数型という意味です。この int や double はその言語の予約語になり、引数などの識別子で使用できなくなります。byte はJava言語でいう予約語です。

さて、JavaScript では型の宣言は必要ありませんが、どうしてエラーになるのでしょう。というか、変数名に使用してはならないという決まりがあるのでしょうか?
これは JavaScript の今後を考えてのことだと僕は推測します。例えば、Microsoft の JScript のリファレンスには「将来使用される語」として、以下のようなものが書いてあります。

abstract, double, goto, native, static, boolean, enum, implements, package, super, byte, export, import, private, synchronized, char, extends, int, protected, throws, class, final, interface, public, transient, const, float, long, short

きちんと byte も書かれていますね。これらは Java言語を経験している方には超おなじみです。これらが将来使用される語ならば、JavaScript は本格的に Java言語に近い形へと移行されるものと思われます。
継承なども prototype ベースで行うのではなく、正規に extends を使用することになるでしょう。

ということで次回は「将来使用される語」を先取って、意味を説明致しましょう。