質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1924閲覧

Javascript 文字列 シングル、ダブルクォーテーションの複合時の法則について

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/11/08 21:29

文字列の、シングルクォーテーションとダブルクォーテーションの混合について
どういう法則なのかわかりません。

tag+="<img src='num"+i+".gif' />";

上記の、クォーテーションの割り振り方の法則をわかりやすく教えてください。

お願いします。

Javascript

1<!DOCTYPE html> 2<html> 3<body> 4<script type="text/javascript"> 5 var i,tag=""; 6 for (i=1;i<=10;i++){ 7 tag+="<img src='num"+i+".gif' />"; // ここのクォーテーションの法則がわかりません。 8 } 9 document.body.innerHTML=tag; 10</script> 11</body> 12</html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

法則としては、
"があれば次に(\でエスケープされていない)"が出てくるまでは'は単なる普通の文字
'があれば次に(\でエスケープされていない)'が出てくるまでは"は単なる普通の文字
ということだけです。

投稿2019/11/08 22:47

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/11/08 23:00

ご回答ありがとうございますm(__)m
guest

0

ベストアンサー

まず、共通しているのは文字列と認識させるための記号ということです。
この記号には、ダブルクォート、シングルクォートの2種類、または、バックォートを加えた3種類があると考えます。

ルールとしては

  1. 文字列の開始位置の記号と同じ記号で終了位置を示す
  2. 記号と同じ記号が含まれる文字列ではエスケープする必要がある (" など)

ダブルクォートとシングルクォートの違いは、プログラミング言語によります。
例えば、Perlという言語では次のような違いがありました(たしかそう。曖昧でごめんなさい)。

  1. ダブルクォートは変数展開できる。
  2. シングルクォートは変数展開できない。

JavaScript では2つとも変数展開する機能は無く、違いも無いように感じますが、
質問コードのように、innerHTML用に与える文字列を生成する場合、属性部分にダブルクォートを含む文字列となるため、エスケープ箇所が増えてしまいます。
ですから、JavaScript では シングルクォートで統一するといいよね。って習慣もありました。
また、バッククォートも使えるようになった最近のjavascript では乱暴に言うと変数展開できます。

以上のことを踏まえて、次のようになります。

tag+="<img src=\"num" + i + ".gif\" />"; // ダブルクォート tag+='<img src="num' + i + '.gif" />'; // シングルクォート tag+=`<img src="num${i}.gif" />`; // バッククォート

だんだんと簡潔に書けるようになっています。

追記)
質問コードはHTML属性値の記述はシングルクォートでも認識されるためですね。

tag+='<img src="num' + i + '.gif" />'; // シングルクォート tag+="<img src='num" + i + ".gif' />"; // 質問のコード

投稿2019/11/08 22:03

編集2019/11/08 22:36
AkitoshiManabe

総合スコア5432

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/11/08 22:20

ご回答ありがとうございますm(__)m
退会済みユーザー

退会済みユーザー

2019/11/08 22:48

法則についてですが、 tag+="<img src='num"+i+".gif' />";を3つに分割すると、 1 "<img src='num" 2 +i+ 3 ".gif' />"; に分けられて、1,3で、『ダブルクォートが使えない、内側の場所をシングルクォートで代用している』という認識や法則で合っていますでしょうか?
AkitoshiManabe

2019/11/08 22:50

合っていますよ。1,3 は文字列で 2 は + 演算によって文字列化する直前の数値です。
退会済みユーザー

退会済みユーザー

2019/11/08 22:59

ご回答ありがとうございますm(__)m
think49

2019/11/09 02:34

> 『ダブルクォートが使えない、内側の場所をシングルクォートで代用している』 厳密にはエスケープすれば、ダブルクォートを使えます。 『ダブルクォートで括った範囲はエスケープしなければダブルクォートが使えず、シングルクォートで代用している』というところでしょうか。
退会済みユーザー

退会済みユーザー

2019/11/09 05:35

ご回答ありがとうございますm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問