Personal tools
You are here: Home ブログ 井上 JavaScriptで再びくだらないバグ
« December 2010 »
Su Mo Tu We Th Fr Sa
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Recent entries
Apache2.4のリリース予定は来年(2011年)初め(あくまで予定) inoue 2010-12-23
Herokuの発音 inoue 2010-12-20
雑誌記事「ソフトウェア・テストPRESS Vol.9」の原稿公開 inoue 2010-12-18
IPA未踏のニュース inoue 2010-12-15
労基法とチキンゲーム inoue 2010-12-06
フロントエンドエンジニア inoue 2010-12-03
ASCII.technologies誌にMapReduceの記事を書きました inoue 2010-11-25
技術評論社パーフェクトシリーズ絶賛発売中 inoue 2010-11-24
雑誌連載「Emacsのトラノマキ」の原稿(part8)公開 inoue 2010-11-22
RESTの当惑 inoue 2010-11-22
「プログラマのためのUXチートシート」を作りました inoue 2010-11-19
「ビューティフルコード」を読みました inoue 2010-11-16
Categories
カテゴリなし
 
Document Actions

JavaScriptで再びくだらないバグ

JavaScript、特にprototype.jsとRubyを同時に書くのは鬼門です。似すぎるがゆえの悲劇があります。

JavaScriptで次のようなコードを書いてしまいました。クラス名の部分は引用のために適当に変えています。class-fooの要素でclass-barではない要素を取得するコードです(イディオム?)。

var elements = $A($$('.class-foo').reject(function(e) { e.hasClassName('class-bar'); });

JavaScriptを書き慣れた人には自明ですが、次のようにreturn文を書く必要があります。

var elements = $A($$('.class-foo').reject(function(e) { return e.hasClassName('class-bar'); });

JavaScriptには脱力バグが多いです。偏見かもしれませんが。

JavaScriptでreturn文のない関数の返り値は undefined になって、真偽値として評価すると偽になります。

// firebug上
> function f() {}
> var x = f()
> typeof x
"undefined"
> if (x) alert('t'); else alert('f')  // 'f'

ちなみにRubyで空のメソッドの返り値はnilになって、現象的には似たような結果です(Rubyで偽になるのはnilとfalseのみ)。

# irb
> def f; end
> x = f
> x.class   #=> NilClass
> p 'f' unless x   # 'f'

returnのない関数の返り値の型はvoid(undefinedのままでもいいですが)にして、真偽値の評価をエラーにしてくれればいいのですが。条件式にはboolean型しか許さないJavaは素晴らしいのでしょう(いちいち、!= null と書くのが面倒くさいと文句言いつつも)。

The URL to Trackback this entry is:
http://dev.ariel-networks.com/Members/inoue/javascript-returns/tbping
Add comment

You can add a comment by filling out the form below. Plain text formatting.

(Required)
(Required)
(Required)
This helps us prevent automated spamming.
Captcha Image


Copyright(C) 2001 - 2006 Ariel Networks, Inc. All rights reserved.