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

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

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

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

Q&A

解決済

4回答

1220閲覧

JavaScriptでの見慣れない記述について

akamotosan

総合スコア12

JavaScript

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

0グッド

0クリップ

投稿2018/08/24 02:35

JavaScript初心者です。
人様のコードを閲覧中、見慣れない記述があったため解説をしていただければ幸いです。

ECサイトなどでよく利用されている個数選択時のスクリプトです。

<form name="form"> <span onclick="box_spin('box1','m');">-</span> <input type="text" name="box1" value="1" size="3" maxlength="3"> <span onclick="box_spin('box1','p');">+</span> </form> function box_spin(name , type){ var itemValue;     ↓ここ itemValue = document.form['' + name].value; ~省略~ }

↓ここがわかりません。
「form」はformのnameで「name」はinputのnameなのは分かりますが、
シングルクォーテーション+は何を指しているのですか?

document.form['' + name]

色々調べましたが見つかりませんでした。
目的は大体分かりますが、どのようなテクニックで書かれているのかが分かりません。
また省略して書かれている様子ですが、このような記述は業務ではよくあることなのでしょうか?
解説していただければ幸いです。

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

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

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

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

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

guest

回答4

0

''自体は、空文字列です。

空文字列と他のものを連結することで、「連結したものを文字列に変換する」という意味を持ちます。

投稿2018/08/24 02:53

maisumakun

総合スコア145123

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

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

maisumakun

2018/08/24 02:54

このような暗黙の型変換を利用したテクニックは、知っていれば正式な変換より書きやすいので、よく使われます。「+value」や「value - 0」で数値に変換する、ということもよく行われます。
akamotosan

2018/08/24 10:38

回答ありがとうございました。 大変参考になりました。 またよろしくお願いします!
guest

0

すでにある通り数値を文字列にキャストすることを目的にしていると推測できますが
例示のソースの記述はあまりに古すぎます。(おそらく15~20年位前の書き方)
参考にするべきではないですね

仮に「box_spin(100,'m')」のような指示をしたとして
document.form(すなわちformという名前をつけたform)に
もしname="100"というinputがあっても参照できません
なのでやるだけ無駄なキャスト処理です

投稿2018/08/24 03:25

yambejp

総合スコア114583

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

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

akamotosan

2018/08/24 10:38

回答ありがとうございました。 大変参考になりました。 またよろしくお願いします!
guest

0

ベストアンサー

+ 演算子

+ 演算子は String 型を引数にとると、もう一方を「Primitive型に変換→String型に変型」の手順で、最終的にString型にする動作を持ちます。

JavaScript

1'' + foo

ショートコーダによく見られる書き方ですが、一度、Primitive型を介在させるので、「String型への変換」とは本質的に違います。
http://d.hatena.ne.jp/sandai/touch/20100916/p1

プロパティアクセサ (Property Accessors)

http://www.ecma-international.org/ecma-262/9.0/#sec-property-accessors

JavaScript

1itemValue = document.form['' + name].value;

この構文ならば、明示的にString型に変換する必要はありません。
プロパティアクセサはキーが Symbol 型でなければ、String型へ変換する仕様です。

Re: akamotosan さん

投稿2018/08/24 03:37

think49

総合スコア18156

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

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

think49

2018/08/24 04:01

> document.form['' + name].value; そもそも、コードが間違ってませんか。document.formsが正しいのでは。 ところで、document.formsはIE6全盛期ですら、便利に感じた事がありません。 getElementByIdが存在しないIE5時代は、重宝されたんでしょうかね。
akamotosan

2018/08/24 10:41

回答ありがとうございました。 特に詳細でしたので、こちらの回答をbaとさせていただきます。 またよろしくお願いします!
guest

0

nameの型が数値でも文字列になるようにキャストしていると思います。

投稿2018/08/24 02:54

oikashinoa

総合スコア2826

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

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

akamotosan

2018/08/24 10:38

回答ありがとうございました。 大変参考になりました。 またよろしくお願いします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問