「JavaScriptパワーについて勉強。」をやってみた。
追記
artonさんからトラックバックを頂きましたので、記述を追加しました。
JavaScriptパワーについて勉強。をやってみた。
1.○
2.×
3.×
4.○
追記
4番は演算子の優先順位と、それだけではなく偽が0となるという振る舞い。ここで、ではfalseという定数はなんだ? と疑問を持つのが正しい。「3 & (5 == 1)」で、falseは数値コンテキストでは0だから、ということですよね。
5.○
※alert(8 || 10);とalert(8 && 10);はPerlでも同じだよね。
6.×
7.○
追記
もしJavaScriptの乗算演算子がxで「"30" x 2」と書いてあったらPerlerがひっかかりますね。
8.×
※getterってキーワードは初めて知った。
追記
あとgetterはnetscape系(現在はmozilla)固有なのでFirefox用ブックマークレットを書くのでも無い限り汎用的には知っていても役に立たないと思います。IEだとスクリプトエラーになってしまうので解答(実行例)を埋め込んでいないわけです。なるほどー。ご説明ありがとうございました。
9.×
※配列のdeleteが奇妙だというのは何となく知っていたけど、やっぱ奇妙だ。
追記
9番は、ArrayといってもObjectと同じ連想配列じゃんというあたりかな。そう。連想配列として実装されているというのは分かっていて、delete直後にa.length==3のままだというのはJavaScriptの奇妙な挙動として記憶していました。Perlでdelete $hash{$key}とするとそのハッシュエントリそのものが消えるので。
この問題を間違ってしまったのは、a[20]=20の時点でa.length==20だと直感的に思ってしまった(つまり0-originだということを一瞬忘れていた)というしょぼいオチだったりします。
10.○
11.×
12.△
※「0.333...335」が×。2つ目のalertは○
13.○
※これは関数ポインタを表示してるだけだから普通な気がするけど。何が不思議なのか誰か教えて。
追記
関数の内容そのものが表示されるところがイイ! ということでした(ような。僕はそうとったけど)。抽象的な関数オブジェクトの表現とかではないところがミソです。なるほど、そういうことですか。てっきり「80と表示されないのがおかしい」ということなのかと思ってしまって疑問でした。ちなみにvar func = new Function("return 80");とevalせずに書けるのもちょっと変わってますよね。
最近JavaScriptを理解できるようになってきたとは思っていたけれども、まだまだ修行が足りないようです。精進します。