Array.map()
はSafariにはないのでより素直な別解。
'#' + [76, 84, 105].map(function(i){ return (i >> 4 ? '' : 0) + i.toString(16) }).join('')
(function(r,g,b){return '#' + (16777216+r*65536+g*256+b).toString(16).substr(1)})(0,127,255)
それにしても、なんでJavaScriptにはString.sprintf()
がないんだろ。ぐぐると実装はいくつか出てくるんだけどね。sprintf()
があれば、
sprintf("#02x02x02x", $r, $g, $b); # perlでの例
ですむのに。
追記: でばっぐさんくす>amachang
// previous and buggy version (function(r,g,b){return '#' + (r < 16 ? 0:'') + (r*65536+g*256+b).toString(16)})(15, 127, 255)
このように r が 0 だとおかしくなりませんか?
別解
(function(r,g,b){return ((1<<24)+(r<<16)+(g<<8)+b).toString(16).replace(/^1/,'#')})(0, 1, 1)
さすが。これなら無条件に0 fillが行われる。
Dan the JavaScripter
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。