http://www.google.com/jsapiを使用してjQueryをロードするときの注意点

http://www.google.com/jsapiを使用した、jQueryのロード


以下の記述で、googleがホスティングしているjQueryを利用することが出来る。

<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">
	google.load("jquery", "1.4");
 	google.load("jqueryui", "1.7");
</script>



バージョン指定のルール

google.load(“jquery”, “1”);だと1.x.xの最新版が自動で取得できるし、google.load(“jquery”, “1.4.x”);の最新になる。
もちろん、google.load(“jquery”, “1.4.2”);といった感じで、バージョンを完全指定することも可。


ライブラリがロードされるタイミング

google.load()はページがロードされたとき(onLoad)のタイミングで実行してくれる。
なので、画面が表示されるまでの遅延は極力抑えられる。

一方で、ページのロード時にこれらのライブラリを利用したい場合は注意が必要。
他の部分でjQueryを使用したくても、jQueryオブジェクト「$」が存在せずエラーになってしまう。


この問題を回避するために、該当のライブラリがロードされてから処理を行いたい場合は、第三引数にコールバック処理を書くと良い。

function onLoadedJQuery() {
	$( "#someId" )...; // jQueryオブジェクトを使った処理
}
 
google.load("jquery", "1.4", {"callback" : onLoadedJQuery});


C#のラムダ式をチェーンさせる記法が便利!

(この記事は,Hidden Features of C#?を参考に記述しています)

C#では、バージョン3.0(Visual C# 2008)以降でサポートされた、ラムダ式というものが有ります。
ラムダ式を使うことで、関数型プログラミングっぽい記述や、デリゲート・イベントハンドラを簡潔に記述することが出来ます。

このラムダ式ですが、実は複数のラムダ式を連結(チェーン)させることが可能です。

    //--------------------------------------------
    // 「dx,dyを渡すと、ハンドラ関数を返す」関数
    //--------------------------------------------
    Func<int, int, EventHandler> makeHandler = (dx, dy) => (sender, e) => {
            // クリックされた部品を取得する
            var btn = (Button) sender;
 
            // 指定された方向にボタンを移動させる
            btn.Top  += dy*5;
            btn.Left += dx*5;
        };
 
    //---------------------------------------------------
    // 各ボタンに対応したハンドラ関数を作って、登録する
    //---------------------------------------------------
    btnUp.Click    += makeHandler( 0, -1);
    btnDown.Click  += makeHandler( 0,  1);
    btnLeft.Click  += makeHandler(-1,  0);
    btnRight.Click += makeHandler( 1,  0);



上記サンプルの、makeHandlerで、ラムダ式のチェーンを行っています。

makeHandler()関数は、引数を2つ受け取るとEventHandlerクラスのラムダ返す処理です。
関数内では、makeHandlerの引数であるdx,dyと、EventHandlerの引数であるsenderが両方使用できるところがポイントです。

この記述をうまく活用すると、似たような処理を何度も書かずに済ます事ができるのが便利ですね。



本処理を使用したプロジェクトをダウンロードできるようにしておきます。
実際にデバッグ実行してみて、振る舞いを確認してみてください。


ダウンロード
LambdaChainTest.zip

[C#]コマンドライン引数の解析ライブラリ WinGetOpt


C#でコマンドラインプログラムを作成した際の、起動引数を解析するためのライブラリを作りました。


出来ること

以下の形式でパラメータ指定された引数を解析できます

1:key,valueの指定が可能
  例: example.exe /key1 value1 /key2 value2

2:value無しで、キーだけ指定することも可能(スイッチ・フラグ等)
  例: example.exe /verbose

3:普通に値だけ指定することももちろん可能
  例: example.exe c:\out.txt

4:もちろん上記全部を組み合わせることも可能
  例: getOrder.exe /MarchantId MID001 /MarketplaceId A1XXX /verbose c:\orderList.txt


サンプル

この手のライブラリを使う人は、仕様説明の文章より、サンプルコード見た方が速いと思うので、いきなりサンプルプログラムを提示します。プログラム中のWinGetOpt.Options, WinGetOpt.CommandLine, WinGetOpt.OptionParserの3つが、今回作成したクラスです。

    using WinGetOpt;
    public static void Main( String[] args ) {
        //---------------------
        // テスト用パラメータ
        //---------------------
        String [] test = { "/secret_key",   "SEC_AAAAA",
                           "/access_key",   "ACC_AAAAA",
                           "/multi_key",    "value1",
                           "/multi_key",    "value2",
                           "/verbose",
                           "/nodefined_key","valueZ",
                           "c:\\outfileName.txt"
                         };
 
        //------------------------------------
        // コマンドラインパラメータを解析する
        //------------------------------------
        CommandLine cl = getParam( test );
 
 
        //------------------------------------
        // 解析後のパラメータを出力する
        //------------------------------------
 
        // dump
        Console.WriteLine( "ToString() :" + cl.ToString() );
 
        // 指定されたパラメータの取得
        Console.WriteLine( "secret_key :" + cl.GetOptionValue( "secret_key" ) );
 
        // 値を持たないflgも指定可能
        if ( cl.HasOption( "verbose" ) ) {
            Console.WriteLine( "verboseが指定されています" );
        }
 
 
        // オプションパラメータが指定されているかのチェック
        if ( cl.HasOption( "entry_point" ) ) {
            Console.WriteLine( "entry_pointが指定されています" );
        } else {
            Console.WriteLine( "entry_pointが指定されていません" );
        }
 
        // 特定のキーに対して複数パラメータの指定も可能
        foreach ( String value in cl.GetOptionValues( "multi_key" ) ) {
            Console.WriteLine( "key1 : " + value );
        }
    }
 
 
    //**********************************************************************************************
    /// <summary>起動引数を取得する
    /// </summary>
    /// <param name="mws"></param>
    //**********************************************************************************************
    private static CommandLine getParam( String[] args ) {
        Options optdef;
 
        //---------------------------------------------------------
        // オプションの定義を行う(optName, hasArg, description)
        //---------------------------------------------------------
        optdef = new Options();
        optdef.AddOption( "access_key",  true , "MWSの秘密キー"                );
        optdef.AddOption( "secret_key",  true , "MWSのアクセスキー"            );
        optdef.AddOption( "entry_point", true , "検索を行うサイトのURL"        );
        optdef.AddOption( "multi_key",   true , "このキーは複数指定できます"   );
        optdef.AddOption( "verbose",     false, "ログの詳細表示を行うかフラグ" );
 
        //---------------------------------------------------------
        // コマンドラインオプションを解析する
        //---------------------------------------------------------
        OptionParser parser = new OptionParser();
        return parser.parse( optdef, args );
    }



実行結果


見やすくするため、一部改行しています

ToString() :param={{key:secret_key value:SEC_AAAAA},
                   {key:access_key value:ACC_AAAAA}, 
                   {key:multi_key value:{value1,value2,},
                   {key:verbose value:true},
                   {key: value:{/nodefined_key,valueZ,c:\outfileName.txt,},
 
secret_key :SEC_AAAAA
 
verboseが指定されています
 
entry_pointが指定されていません
 
key1 : value1
key1 : value2



ちなみに、key(xxx.exe /keyの”/key”部)無しパラメータは、cl.GetOptionValues(“”)で取得できます。


ダウンロード:
WinGetOpt.zip

[C#]コンソールプログラムで、Ctrl-Cが押されてもプログラムを終了させない

Console.CancelKeyPressにイベントを登録することで、Ctrl-Cが押されたことを検出できます。
さらに、イベントハンドラ内でCancel=trueにすることで、プログラムの終了を阻止することが可能です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
 
class Test {
    public static void Main( String[] args ) {
 
        Console.CancelKeyPress += (sender, e) => {
            Console.WriteLine("CTRL+C が押されました");
            // trueにすると、プログラムを終了させない
            e.Cancel = true;
        };
 
        System.Console.WriteLine( "hello world" );
        System.Threading.Thread.Sleep( 5 * 1000 );
        System.Console.WriteLine( "program end" );
    }
}

C#で、hello worldをコマンドラインからコンパイルする

C#で、hello worldをコマンドラインからコンパイルする


プログラム:

using System;
 
class Test {
	public static void Main( String[] args ) {
		System.Console.WriteLine( "hello world" );
	}
}





コンパイル&実行:

スタートメニューより、以下のプログラムを実行する。
すべてのプログラム
 → Microsoft Visual Studio 2010
 → Visual Studio Tools
 → Visual Studio コマンド プロンプト


コマンドプロンプトが起動される。
このプロンプトは、内部的には事前に以下の環境設定用バッチを起動してるだけ。
C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat

C:\>csc test.cs
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.
 
 
C:\>test
hello world

Amazonマーケットプレース用アプリの使用時に必要な準備作業(出品者向け)

誰かが作ったAmazonマーケットプレース用のアプリを使用する場合は、事前に「権限付与」の作業を行う必要があります。
ここでは、この「権限付与」の仕組みと、作業手順を説明します。


なぜこんな作業が必要なの?

開発者と利用者が別人の場合、利用者が開発者に対して権限を付与する必要があります。
これは、利用者の出品情報を想定しない他人に使用させないための保護機能です。

アプリ(ソフト)から出品情報にアクセスするには、以下の3つのIDがそろっている必要があります。
「MWS開発者アカウント番号」(開発者から教えてもらいます)
「出品者ID」(出品者が取得します。詳細は後述)
「マーケットプレイスID」(出品者が取得します。詳細は後述)



用語の意味

この記事で使用している用語の説明です。

開発者
    プログラムを作った人
 
利用者
    商品を出品する人
    (アプリを使う人)
 
AmazonMWS
    「アマゾン マーケットプレース Web サービス」の略
  アマゾンが提供している、マーケットプレース利用者向けの機能
    これを利用すると、出品や出荷の作業をブラウザから作業しなくても、アプリから操作できるようになる。
 
アプリ、アプリケーション
    プログラムのこと
 
出品者ID
    出品者を識別するためのID
    マーチャントID(MerchantId)と呼ばれることもある





権限付与の流れ

権限付与の手順は以下の通りです。

Step1. 開発者は、MWSに登録して「MWS開発者アカウント番号」を取得する。
Step2. 開発者は、利用者に「MWS開発者アカウント番号」を伝える
Step3. 出品者は、「MWS開発者アカウント番号」を、自身のMWSアカウントに対して登録する




出品者がすること


上記ステップのうち、Step1,2は開発者が事前に行うことです。
ここでは、出品者が行うべき作業を説明します。


https://developer.amazonservices.jp/index.htmlにアクセスします。


登録するをクリックします



ユーザIDとパスワードを入力し、「サインインします」のボタンをクリックします。



選択肢より、「アプリケーションを使って、マーケットプレイスWebサービスにアクセスすることを希望します。」を選び、開発者より伝えられた、「アプリケーション名」と、「MWS開発者アカウント番号」を入力します。



ライセンス契約を確認後、2箇所にチェックを入れ、次へをクリックします。



手続き完了画面が表示されます。
この画面に表示された「出品者ID」と、「マーケットプレイスID」を控えておきます。(それぞれ14桁の英数字です)
これらのIDはアプリの使用時に使います。

※IDを忘れてしまった場合は、上記の作業をもう一度やり直せば、確認できます。

アマゾンマーケットプレースの「複数商品の出荷通知」で、配送業者を自動選択する


アマゾンマーケットプレースの出品者側の画面で、購入者に出荷通知を送る画面があります。
この画面で、毎回配送業者を選択するのが面倒なので何とかして欲しいとの依頼を受けたので、自動化するスクリプトを作成しました。
(大抵の場合、ヤマトのメール便らしいです…)

作った自動化スクリプトですが、せっかくなので公開します。



スクリプトはfirefoxのGreasemonkeyプラグイン用として作成したので、firefoxとgreasemonkeyがインストールされている必要があります。
インストールの仕方は、下記のサイトを参照してください。
http://gihyo.jp/dev/feature/01/greasemonkey/0001?page=1
※firefox以外にchromeやopera用のGreasemonkeyも有りますが、firefox以外の環境では未テストです。
 (多分そのまま動くと思います…)


本記事最後にあるファイルをインストールしてください(ダウンロードのリンクをクリックするだけです)。
出荷通知のページを開いた瞬間に、ヤマト運輸”メール便” が初期値として入力済みの状態になります。
他の配送業者を初期値にしたい場合は、スクリプトの12行目付近にある定義を変更して下さい

selCarrierName.selectedIndex = 1;          // 配送業者 1:ヤマト, 2:佐川, 3:日通 4:西濃 5:日本郵便
txtShipMethod.value          = "メール便"; // 配送方法




ダウンロード:
Amazon_MarketPlace_ShippingConfirm.user.js

2012/8/31 追記:
Amazon.co.jpのhtml変更に伴いソース変更しました。最新版のソースはこちらです。
アマゾンマケプレで、配送業者を自動選択するスクリプトを変更

[jQuery]一度発行したajaxリクエストを途中で中断する方法

jQueryでサーバからデータを取得する際、ajaxで問合せを行うと非同期処理となる為、ユーザビリティが向上します。
ですが、データの問い合わせによっては、サーバ側で非常に時間が掛かる場合もあります。
この際に一旦行った問い合わせをキャンセルする場合は、どうしたらよいでしょうか?


一旦行ったリクエストをキャンセルする場合は、$.ajax()で取得したオブジェクトに対して、abort()をコールするとリクエストのキャンセルが可能です。


サンプル:

var req;
 
// 検索を行う
$( "btnSearch" ).click( function() {
	req = $.ajax({
	    type: "GET",
	    url:  "/test/getData.php",
	    data: "id=1",
	    success: function( name){
			       alert( "検索が完了しました:" + name );
			    }
	});
});
 
// 検索を中断する
$( "btnStop" ).click( function() {
	//リクエストの中断
	req.abort();
	alert( "検索を中断しました" );
});


Amazon MWSの注文関係API


URLのベース: https://mws.amazonservices.jp/Orders/2011-01-01


オペレーション一覧


オペレーション名 内容 リクエスト制限
ListOrders 注文一覧を取得 max:6req
回復レート:5req/min
ListOrdersByNextToken 注文一覧の続きを取得 max:6req
回復レート:5req/min
GetOrder 注文IDを指定して、注文を取得
(一度にmax50件まで)
max:4req
回復レート:1req/10min
ListOrderItems 注文ID指定で、注文の商品明細を取得 max:30req
回復レート:1req/6sec
ListOrderItemsByNextToken 注文ID指定で、注文の商品明細の続き取得 max:30req
回復レート:1req/6sec
GetServiceStatus サービスの稼動状態を取得 max:2req
回復レート:1req/5min

仕様書

https://images-na.ssl-images-amazon.com/images/G/09/mwsportal/doc/ja_JP/orders/MWSOrdersApiReference._V162601789_.pdf

Amazon MWSのAPIリクエスト制限の仕組み

Amazon MWSでは、リクエスト数の上限管理に、leaky bucket algorithmを採用している。
wikipedia: リーキーバケット

用語の説明


スロットル
    Amazon MWSで、サーバ側が高負荷にならないように、APIリクエスト回数の制限を作っている。
    MWSではこの仕組み(アルゴリズム)を、スロットルと呼んでいる。
 
リクエストクォーター
	リクエスト可能な最大数(この数を超えるとリクエストできない)
	リクエストを投げるたびに加算される。
 
最大リクエストクォーター
	各オペレーション毎の上限値
 
回復レート
	増えてしまったリクエストクォーターの減少ペース
	一定時間ごとに、Amazon側で加算したリクエスト数が減って行く




例題


ListOrdersリクエスト
	最大リクエストクォーター:6リクエスト
	回復レート:5リクエスト/分


もし、合計で15リクエストしたい場合…
最初にまとめて6リクエスト実行できる。
7リクエスト目はエラーとなる為、実行できない。

その後1分待つと、5リクエスト実行できるようになる。
さらに1分待っても、Maxが6なので、実行できる上限は5+6=11ではなく、6になる。

最小の時間でリクエストしたい場合は、2分で完了できる。
6request -> sleep 1min -> 6request -> sleep 1min -> 3request

[jQuery]formのselect要素を操作する方法まとめ

jQueryを使用して、formのselect要素を操作する方法のまとめです。

例は、以下のselect要素があった場合で記述しています。

<select id="selTest" size="6" multiple>
    <option value="key1">value1</option>
    <option value="key2">value2</option>
    <option value="key3">value3</option>
</select>





プログラム


選択肢を追加する


curKey = 10;
 
var key  = "key" + curKey;
var text = "value" + curKey;
curKey += 1;
$('#selTest').append( $('<option value="'+key+'">'+text+'</option>') );



選択肢を削除する


var key  = $('#selTest option:selected').val();
$('#selTest option[value='+key+']').remove();



指定された要素を選択する


// 指定された要素を選択する
$('#selTest').val('key3');



n番目の要素を選択する


var offset = 2;
var option = $('#selTest option:eq('+offset+')');
if ( option.val() === undefined ) {
    alert( "3番目の要素は存在しません" );
    return;
}
 
var key = option.val();
alert( "3番目の要素 :" + key );
});



選択された要素を取得する


var key  = $('#selTest option:selected').val();
if ( key === undefined ) {
    alert( "要素が選択されていません" );
    return;
}
 
var text = $('#selTest option[value='+key+']').text();
alert( key + "=" + text );



選択された要素が変わったときのハンドラを登録する


$('#selTest').bind('change', function() {
    alert( "選択状態が変更されました" );
});
 
alert( "選択変更時のハンドラを登録しました。" );



選択されている全要素を取得する


$('#selTest option:selected').each(function() {
    var key  = jQuery(this).val();
    var text = jQuery(this).text();
    alert( key + "=" + text );
});





テスト



[jQuery]セレクタで指定したノードの存在チェックを行う関数

jQueryでは指定したノードが存在するかを存在するチェック関数が有りません。


幸い、jQueryではjQuery.fnにメソッドを追加することで、期待するような処理を行うことが出来ます。

jQuery.fn.exists = function(){return this.length>0;}




呼び出し側は、以下のような感じになります。

if ($(selector).exists()) {
    // ノードが存在したときの処理を行う
}






…もちろん、こんな関数を使用しなくても以下の処理で代用可能ですが、exists()を定義した方が可読性は高くなります。

if ($(selector).length > 0) {
    // ノードが存在したときの処理を行う
}


[JavaScript]ハッシュに登録したデータの削除方法

例えば、以下のハッシュがあった場合に

var dataList = {"key1":"value1", "key2":"values" };




key1は、こうやって削除できます。

delete dataList.key1;




削除キーが動的に決まる場合は、”[]”で指定することも可能です。

var keyName = "key1";
delete myJSONObject[ keyName ];


Node.jsを始める上でチェックしておきたい資料:21+α

全て海外のリソースです。

Tutorials


Videos



Books



Blogs


Podcasts



JavaScript resources



Node Modules




nodecasts.orgのビデオは、英語だけど聞き取りやすく分かりやすいです。



http://jsapp.us/
webブラウザ上で、node.jsを実行できます。
コードを書いて、Ctrl-Bで実行できます
(負荷が高いときは、about:blankの状態で中々反応しないときもありますが、暫く待っていると実行されます)



http://camp.nodejs.org/videos/
2011年12月に実施された、Node.js Campの模様です。
Node.jsをはじめる上で役立つ資料です。

トピック:
Intro from Ryan Dahl (Creator)
NPM - Node Package Manager
Socket.io
An example game covered from both the client and server perspective
Redis
CouchDB
Initial Deployments






この記事は、以下のページを参考に作成しています。
How do I get started with Node.js

[jQuery]チェックボックスの変更方法

jQuerでform内にあるチェックボックスの状態を変更する方法です。


jQuery1.6以降は、prop()メソッドが追加されているので、以下の処理で変更できます。

// チェックを入れる
$(".chkBox").prop("checked", true);
 
// チェックをはずす
$(".chkBox").prop("checked", false);



jQuery1.5以前の場合は、attributeを直接操作します。

// チェックを入れる
$('.myCheckbox').attr('checked','checked')
 
// チェックをはずす
$('.myCheckbox').removeAttr('checked')






また、チェックが入っているか判定する場合は、チェックボックスのDOM要素を取得後、checkedプロパティを参照します。

if (this.checked) {
    ....;
}



名古屋市地下鉄:複数の路線が乗り入れている駅の一覧

各アルファベットの意味

H:東山線
S:桜通線
T:鶴舞線
M:名城線
E:名港線
K:上飯田線


駅名 駅番号1 駅番号2
金山駅 E01 M01
栄駅 H10 M05
丸の内駅 S04 T06
久屋大通駅 M06 S05
御器所駅 S10 T12
今池駅 H13 S08
上前津駅 M03 T09
新瑞橋駅 M23 S14
八事駅 M20 T15
伏見駅 H09 T07
平安通駅 K02 M11
本山駅 H16 M17
名古屋駅 H08 S02

名古屋市地下鉄の駅名と駅番号の一覧



名古屋市地下鉄の駅名と、駅番号の対応表です。
あおなみ線と、リニモは地下鉄じゃないので未記載です。

H:東山線

駅番号 駅名 場所
H01 高畑駅 中川区
H02 八田駅 中川区
H03 岩塚駅 中村区
H04 中村公園駅 中村区
H05 中村日赤駅 中村区
H06 本陣駅 中村区
H07 亀島駅 中村区
H08 名古屋駅 中村区
H09 伏見駅 中区
H10 栄駅 中区
H11 新栄町駅 東区
H12 千種駅 東区
H13 今池駅 千種区
H14 池下駅 千種区
H15 覚王山駅 千種区
H16 本山駅 千種区
H17 東山公園駅 千種区
H18 星ヶ丘駅 千種区
H19 一社駅 名東区
H20 上社駅 名東区
H21 本郷駅 名東区
H22 藤が丘駅 名東区


S:桜通線

駅番号 駅名 場所
S01 中村区役所駅 中村区
S02 名古屋駅 中村区
S03 国際センター駅 中村区
S04 丸の内駅 中区
S05 久屋大通駅 中区
S06 高岳駅 東区
S07 車道駅 東区
S08 今池駅 千種区
S09 吹上駅 千種区
S10 御器所駅 昭和区
S11 桜山駅 瑞穂区
S12 瑞穂区役所駅 瑞穂区
S13 瑞穂運動場西駅 瑞穂区
S14 新瑞橋駅 瑞穂区
S15 桜本町駅 南区
S16 鶴里駅 南区
S17 野並駅 天白区
S18 鳴子北駅 天白区
S19 相生山駅 緑区
S20 神沢駅 緑区
S21 徳重駅 緑区


T:鶴舞線

駅番号 駅名 場所
T01 上小田井駅 西区
T02 庄内緑地公園駅 西区
T03 庄内通駅 西区
T04 浄心駅 西区
T05 浅間町駅 西区
T06 丸の内駅 中区
T07 伏見駅 中区
T08 大須観音駅 中区
T09 上前津駅 中区
T10 鶴舞駅 中区
T11 荒畑駅 昭和区
T12 御器所駅 昭和区
T13 川名駅 昭和区
T14 いりなか駅 昭和区
T15 八事駅 昭和区
T16 塩釜口駅 天白区
T17 植田駅 天白区
T18 原駅 天白区
T19 平針駅 天白区
T20 赤池駅 日進市


M:名城線

駅番号 駅名 場所
M01 金山駅 中区
M02 東別院駅 中区
M03 上前津駅 中区
M04 矢場町駅 中区
M05 栄駅 中区
M06 久屋大通駅 中区
M07 市役所駅 中区
M08 名城公園駅 北区
M09 黒川駅 北区
M10 志賀本通駅 北区
M11 平安通駅 北区
M12 大曽根駅 北区
M13 ナゴヤドーム前矢田駅 東区
M14 砂田橋駅 東区
M15 茶屋ヶ坂駅 千種区
M16 自由ヶ丘駅 千種区
M17 本山駅 千種区
M18 名古屋大学駅 千種区
M19 八事日赤駅 昭和区
M20 八事駅 昭和区
M21 総合リハビリセンター駅 瑞穂区
M22 瑞穂運動場東駅 瑞穂区
M23 新瑞橋駅 瑞穂区
M24 妙音通駅 瑞穂区
M25 堀田駅 瑞穂区
M26 伝馬町駅 熱田区
M27 神宮西駅 熱田区
M28 西高蔵駅 熱田区
M01 金山駅 中区


E:名港線

駅番号 駅名 場所
E01 金山駅 中区
E02 日比野駅 熱田区
E03 六番町駅 熱田区
E04 東海通駅 港区
E05 港区役所駅 港区
E06 築地口駅 港区
E07 名古屋港駅 港区


K:上飯田線

駅番号 駅名 場所
K01 上飯田駅 北区
K02 平安通駅 北区

[JavaScript]数値を,N進数の文字列に変換する簡単な方法

NumberのtoString()の引数として、基数を指定するとN進数の文字列に変換できます。
例えばtoString(2)で、2進数の文字列に変換できます。

var x = 5;
x.toString(2)       // "101"
 
(10).toString(8);   // "12"
(255).toString(16); // "ff"



この記事は、以下のページを参考に作成しています。
Hidden Features of JavaScript?

[JavaScript]rubyの「times」メソッドをJavaScriptで実装する。

プログラム言語のrubでは、数値クラスに対してtimesというメソッドが実装されてます。
この為、以下のプログラムで”0,1,2,3,4,5″の文字を出力することが出来ます。

5.times { |i| 
    puts "#{i}"
}



これと同様のことをJavaScriptで行いたい場合は、以下の関数定義を行います。

Number.prototype.times = function( funct ) {
  if( typeof funct === 'function') {
    for( var i = 0; i < Math.floor(this); i++ ) {
      funct(i);
    }
  }
  return this;
}
 
//呼び出し側サンプル
(5).times(function(i){
  alert( i );
});

[JavaScript]”010″が10として評価さず、8になってしまう。

JavaScriptで先頭0から始まる数字は8進数とみなされるからです。

例えば以下のコードは、8が表示されます。

<script>
    var value = parseInt( '010' );
    alert( value );
</script>



先頭に0が入ると8進数とみなされる仕様は、JavaScript以外にC言語も同様です。
“0x”が入ると16進数とみなされるのは有名ですが、先頭の0で8進数とみなすのは、一度はまると勘違いに気づかないので注意が必要です。


但し、javascriptで「+”010″」は10と評価されます。これは、Number()クラスが8進数を認識できないのが原因です。