(お金など形式テキスト)私はCでダフのデバイスのこの種を持っており、それが正常に動作します:移植ダフのデバイス
#include <stdio.h>
#include <string.h>
char *money(const char *src, char *dst)
{
const char *p = src;
char *q = dst;
size_t len;
len = strlen(src);
switch (len % 3) {
do {
*q++ = ',';
case 0: *q++ = *p++;
case 2: *q++ = *p++;
case 1: *q++ = *p++;
} while (*p);
}
*q++ = 0;
return dst;
}
int main(void)
{
char str[] = "1234567890123";
char res[32];
printf("%s\n", money(str, res));
return 0;
}
出力:
1,234,567,890,123
しかし、私は問題を抱えていますJavaScriptで同じことを実現しようとしている:
function money(src, dst) {
var len = src.length;
var i = 0;
switch (len % 3) {
do {
dst += ',';
case 0: dst += src[i++];
case 2: dst += src[i++];
case 1: dst += src[i++];
} while (src[i]);
}
return dst;
}
var str = "1234567890123";
var res = "";
console.log(money(str, res));
nodejsリターンをこのエラー:
do {
^^
SyntaxError: Unexpected token do
私の質問です:javascriptは計算されたGOTO文をサポートしていますか?
P.D:私は代替を望んでいない、なぜ私はちょうどなぜ動作していないか知りたい。
関連質問:Does Duff's Device work in other languages?
ニース、意味があります。そして、リンクのおかげで、 –
すみませんが、私は理解していません: 'それはコールバックを介して動作しません'、それはどういう意味ですか? –
@AlterMann基本的には、機能間では機能しません。 JavaScriptでは、将来の値やイベントに反応する手段として関数オブジェクトを渡すのが一般的です。 100ms待つ: 'window.setTimeout(function(){/ * * /}、100);'。そのような関数がループの中で*宣言されていると、ループ内で印象を与えるかもしれません(したがって、 'break'、' continue'などを使うことができます)が、実行された場合はそうではありません非同期に。ちょうどGoogleの "JavaScriptの戻り値は動作しません"とあなたはちょうどその戻り値を代わりにその問題について正確に質問して初心者の質問のボート負荷を見つけるでしょう。 – Siguza