JavaScriptでArrayのようなObjectをArrayとしてあつかう
JavaScriptではArrayのようなObjectはArrayのメソッドを利用することやArrayに変換することが可能です。ArrayのようなObjectというのは添字に数字をつかっていて、lengthという内容の数を示すプロパティーがあるObjectのことを指します。たとえばStringやDOMのNodeListなどが当てはまります。
Array.prototype.map.call('STRING', function(str) {
return str + str.toLowerCase();
}).join('');
といった形でつかうことができます。またsliceメソッドをもちいてArray.prototype.slice.call(str)とすることにより任意のObjectをArrayに変換することが可能になります。
function toArray(obj) {
return Array.prototype.slice.call(obj);
}
といった函数を用意しておけばさまざまな用途につかうことが可能になるので便利なのではないでしょうか。
たとえばdocument.getElementsByTagNameで取得することができるNodeListは動的なものなりますので、for文を用いてループをさせると多少遅くなってしまいます。なのでtoArray(document.getElementsByTagName('a'))のようにあらかじめしておけば、速度も速くなりますし、またforEachやmapといった配列を操作するのに便利なメソッドをつかうことが可能になり、コード全体の見通しも比較的 良くなるのではないでしょうか。
JavaScriptは変数名などに非ascii文字がつかえる。
一見できないとおもわれがちではあるのですが、JavaScriptは変数や函数の名前に日本語などの非asciiな文字をつかうことが可能です。ただ入力時にIMの切りかえをおこなわなければならず、またコードの見通しもあまりよろしくなくなるので積極的につかいたいとおもえるようなものではありませんが、知っていても損はないことかとおもいます。
糖衣構文はなるべく避けてコードを書いている
わたしがコードを書くときには、よほどのことがない限りは糖衣構文 (シンタックスシュガー) はなるべく避けるように書いています。書きやすさや短さよりも、ひとめ見るだけでどう動くのかがわかりやすくなっているコードのほうが良いとわたしはかんがえています。なので、たとえばJavaScriptのGlobalObject['ObjectName']['methodName']()はObjectName.methodName()のように、糖衣構文のほうがわかりやすい場合は糖衣構文をつかうようにしています。
わたしがCoffeeScriptをつかわない理由
クラス (のような物) を実装したい時に
class TestServer extends Server
constructor: (options) ->
super()
@hostname = options.hostname or 'localhost'
@port = options.port or 80
run ->
@listen @port, @hostname
と書くのと
function TestServer(options) {
Server.call(this);
this.hostname = options.hostname || 'localhost';
this.port = options.port || 80;
}
TestServer.prototype = Object.create(Server.prototype);
TestServer.prototype.run = function() {
this.listen(this.port, this.hostname);
};
と書くのにみじかく書けるということ以外に明確な差があるとわたしはおもえないので、新たに学習してまでCoffeeScriptをあえてつかう理由はないとかんがえています。