アプリ版:「スタンプのみでお礼する」機能のリリースについて

Smessage = Smessage.substring(2,Smessage.length) + Smessage.substring(0,2);の部分ですが、動きがイマイチわからないです。

substringで配列2つ目(= S2)とlengthで持ってきた値=4(だがsubstringの終了インデックスはその前の数字を考えるので3つ目= S3)を抜き出し、2つ目のsubstringで配列0番目(= S1)=と2番目(= S3)を抜き出し、
結果S2とS4 + S1とS3をSmessageに代入しているんですか?
順番としてはS2が最初に来て次にS4、 S1最後にS3が来るのではないんですか?
でも実行結果はS1、S2、S3、S4と順番通りになっています。この辺が良くわかりません。


<!DOCTYPE HTML>
<html><head>
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<script type="text/javascript">
<!--
var TC = 0 ;
var S1 = "1つ目の空白 ";
var S2 = "2つ目の空白 ";
var S3 = "3つ目の空白 ";
var S4 = "ここにメッセージ......。";
var Smessage = S1+S2+S3+S4;
var timeID=setTimeout("",1) ;
function Message() {
if (TC < 1000) {
TC++ ;
window.status = Smessage;
Smessage = Smessage.substring(2,Smessage.length) + Smessage.substring(0,2);
clearTimeout(timeID)
timeID = setTimeout("Message()",300);
}
else { window.status = " " }
}
//-->
</script>
<style type="text/css">
<!--
body { background-color: #AFEEEE; }
-->
</style>
</head>
<body onLoad="Message()">
★ステータス行に文字を流してます
</body></html>

A 回答 (3件)

> Smessage.substring(2,Smessage.length) の()内は2と1つ目の空白 からここにメッセージを数えた文字数が入るのでしょうか? 


> 次のsubstring(0,2)は0番目から2番目の文字なので、「1・つ・目」の3文字?

これくらいは、自分で調べましょう。
・マニュアルや解説サイトを探して、読む。
・alertやデバッガを使って確認する。
など。

例えば上のプログラムの該当個所周辺を
window.status = Smessage;
// デバグ用
alert(Smessage);
alert(Smessage.length);
alert(Smessage.substring(2,Smessage.length)) ;
alert(Smessage.substring(0,2));
//
Smessage = Smessage.substring(2,Smessage.length) + Smessage.substring(0,2);
// デバグ用
alert(Smessage);
//
とでもすれば、その2つの質問への答えになるはずです。

この回答への補足

返事が遅れました。
変数の文字列を同じにして考えていたのがバカでした。
var Sm1 = "01つMe";
var Sm2 = "2tsu目";
var Sm3 = "3津メ";
var Sm4 = "ここにメッセージを入れます......。";
とし、 さらに
Smess = Smess.substring(2,4) + Smess.substring(0,2);
とし、時間もtimeID = setTimeout("Mess()",5000);
のようにゆっくりにしてalertで試してみるべきでした。
検証不足は申し訳ないです。
ただそれでもすいません。まだ、仕組みが解ってません。
なぜ文字がずれているのですか?
substiringは完全に取り除くと言うイメージですか?
1回目のアラートで
つM01
これはわかります。
でも2回目のアラート
01つM
になぜなるのかわかりません.
それとlengthが間に入っているのがややこしいです。

補足日時:2014/11/01 12:47
    • good
    • 0

> substringで配列2つ目(= S2)


からして間違いです。


var Smessage = S1+S2+S3+S4;
はS1とS2とS3とS4を連結して一つの文字列にするもの。

var S1 = "1つ目の空白 ";
var S2 = "2つ目の空白 ";
var S3 = "3つ目の空白 ";
var S4 = "ここにメッセージ......。";
だから
var Smessage = "1つ目の空白 2つ目の空白 3つ目の空白 ここにメッセージ......。";
になる。
Smessageは配列ではない。


文字列.substringは、文字列の一部を切り出して、新しい文字列にするもの。
マニュアルなどに書いてある「インデックス」は「何文字目」というのとほぼ同義。
「インデックス0番目の文字」=「一文字目」

この回答への補足

こちらへの回答も有難うございます。
Smessage.substring(2,Smessage.length) の()内は2と1つ目の空白 からここにメッセージを数えた文字数が入るのでしょうか? 次のsubstring(0,2)は0番目から2番目の文字なので、「1・つ・目」の3文字?

補足日時:2014/10/28 22:13
    • good
    • 0

今、試せる環境に無いのですが。



Smessageに”ABCDEF”でも代入し、Alartで
Smessage.substring(2,Smessage.length) + Smessage.substring(0,2);
を表示するだけのプログラム書いてみるとかしたほうが
結局早くないですか?

この回答への補足

ご提案有難うございます。ただ質問としてはコードについてかみ砕いた解説をお願いしたいです。

補足日時:2014/10/28 21:38
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!