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

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

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

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

JavaScript

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

4回答

1353閲覧

文字列と配列の差は、何故生まれるのか

aaaaaaaa

総合スコア501

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

JavaScript

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

3グッド

0クリップ

投稿2016/03/07 11:26

編集2016/03/08 05:42

sliceメソッドが文字を取得するときは、第一引数の値、つまり開始位置に加算をして、配列を取得するときは、第二引数の値、つまり終了位置を減算します。
なぜ、文字列が加算で、配列が減算なのでしょうか。そもそもなぜ加算したり減算したりするのでしょうか。
また、文字列をsliceメソッドで取得するときの初めの数値は「1」文字目から始まりますが、配列のときの添え字は「0」から始まります。配列の添え字が0から始まるのはわかりますが、何故文字列は、1文字目から始まるのでしょうか。
「あいうえお」という文字列をcharAt(0)で取得すると、引数内が加算され「あ」が取得できます。
ちなみに上記は、javascript逆引きレシピという書籍の記述から生まれた疑問です。
なぜ、文字列と配列で差が生まれたのでしょうか?

makoto-n, 5o5o_wagon👍を押しています

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

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

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

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

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

guest

回答4

0

なるほど
これですね
P98
slice(sart [,end]) 文字列のstart+1~end文字目を取得
P119
配列.slice( 開始位置, 終了位置-1 )

start+1 は、 配列のindex + 1
終了位置-1 は、 配列数 - 1

start+1 と  終了位置-1だけみると混乱してくるが、

slice ( 配列の開始位置, 配列の終了位置 ) で close かな

投稿2016/03/08 07:19

編集2016/03/08 07:24
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2016/03/08 07:26

なぜ 配列は0からはじまるのか? という疑問もわいてきた?
退会済みユーザー

退会済みユーザー

2016/03/08 07:41 編集

文字は あいうえお 1文字目から始まります。 0文字目? って表現して、指せる場所がないですね。 しかし、配列は 0から始まります。 メモリ上の開始位置 +---+--+--+--+--+------------------> | あ | い | う | え| お| | | +---+--+--+--+--+------------------> ↑  ↑ 0  1
guest

0

ベストアンサー

文字列も配列も index 値は 0 から始まるので何も変わらないように思われます。
ただ、1番始めに始まる値の表現が

  • 文字なら「1文字目」
  • 配列なら「index が 0 の値」

とすると文字列の方が一つ値が大きいように見えるかもしれません。
しかしながら、index 値は両方とも 0 ですし、両方とも「先頭から数えて1番目の値」ですよね。
言い換えるなら、「1文字目 === 0 番目の index の文字」です。

JavaScript

1var array = ['あ', 'い', 'う', 'え', 'お'], 2 string = 'あいうえお; 3 4console.log(array[0]); // index `0` の配列値(1つ目の要素) 5console.log(string[0]); // index `0` の文字列値(1文字目)

Array.prototype.slice, String.prototype.slice も同じで index 値で見れば両者とも同じ挙動である事がわかります。

JavaScript

1var array = ['あ', 'い', 'う', 'え', 'お'], 2 string = 'あいうえお'; 3 4console.log(array.slice(1, 3)); // ["い", "う"] <-- index 1 から 2 の要素を抽出 (先頭から数えて2番目の要素から3番目の要素を抽出) 5console.log(string.slice(1, 3)); // "いう" <-- index 1 から 2 の文字を抽出 (2文字目から3文字目を抽出)

ちなみに、jQuery.prototype.slice も同じ挙動です。

Re: aaaaaaaa さん

投稿2016/03/08 10:40

think49

総合スコア18166

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

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

aaaaaaaa

2016/03/11 03:19

ご回答有難うございました。 両方とも0だったということですね。なぜ、この書籍(javascript逆引きレシピ)はあのような記述になったのでしょうか。
guest

0

String.prototype.slice() - JavaScript | MDN
Array.prototype.slice() - JavaScript | MDN

上のページにあるとおり、StringとArrayのどちらのsliceメソッドも
0から始まるインデックスを指定しますが、
差があるとはどこのことを言っているのでしょうか?

投稿2016/03/07 11:46

YsMana

総合スコア257

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

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

0

???
なぞ質問ですね。YsManaさんが仰っているように、両方とも振る舞い方は同じのようです。

Javascript

1console.log('abcdefghij'.slice(0,3)); 2"abc" 3 4console.log(['a','b','c','d','e','f','g','h','i','j'].slice(0,3)); 5["a", "b", "c"] 6 7console.log('abcdefghij'.slice(1,3)); 8"bc" 9 10console.log(['a','b','c','d','e','f','g','h','i','j'].slice(1,3)); 11["b", "c"]

このように、まったく同じ結果が返ります。
加算減算と言っておられますが、何をもって加算減算と言っているのでしょうか?

投稿2016/03/08 06:28

shi_ue

総合スコア4437

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

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

aaaaaaaa

2016/03/08 06:47

ご回答有難うございます。 質問文にもある通り、「javascript逆引きレシピ」の098pと119p目に記述してあるページ内で加算や減算がされており、その内容についての疑問なので申し訳ありませんが私も何をもって記述してあるのかは解かりません。
shi_ue

2016/03/08 06:56

そうですよね。 本にどのように書かれているか、質問文に記載するほうが親切ですね。引用でしたら、引用元をはっきり示せば、著作権違反にはなりません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問