4

私はちょうどJavaScriptを読んでいます:DavidFlanaganによる決定的なガイド。私は本当にうれしくて、私の最初のJavascript本がこれであることがうれしいです。:)

ただし、この段落(3.7不変のプリミティブ値と可変オブジェクトの参照)をあまり理解できません。

JavaScriptには、プリミティブ値(、、ブール値、数値、文字列)とオブジェクト(配列や関数を含む)の間に根本的な違いがありundefinedます null。プリミティブは不変です。プリミティブ値を変更(または「変更」)する方法はありません。これは数値とブール値にとって明らかです—<strong>数値の値を変更することは意味がありません。ただし、文字列についてはそれほど明白ではありません。文字列は文字の配列に似ているため、指定した任意のインデックスで文字を変更できると期待される場合があります。

おそらく、CSのバックグラウンドが不足しているために何かが足りないだけです(独学ですべて...)が、誰かが私に光を当てるのを手伝ってくれるでしょうか?

特に私が強調した部分:数値の値を変更しても意味がないのはなぜですか?


これまでの私の考え:

  • 多分彼は「変数」と「値」の概念(他の言語では何と呼ぶことができるか)を厳密に区別しています。次に、OK、3の値を4の値に変更することは実際には意味がありません(そのため3 == 4)が、そのような説明は次の文で失敗します:そのような操作は数字よりも文字列に対して意味がありません...?
4

4 に答える 4

6

文字列リテラルの値を変更するのは意味がないというのはあなたの言うとおりです。これは彼が実際に言っていることです。彼は、文字列内の個々の文字を参照できるため、ケースほど明白ではないかもしれないと言ってい3 == 4ます (そして、特定の文字を変更することで文字列を変更できると考えるかもしれません)。

例を考えてみましょう:

var s = 'hello world';
s[0] = 'H';

直感的には、これは単語を大文字にするように見えますが、文字列は不変であるため、機能しません

の出力を確認すると、次のsことがわかります。s > 'hello world'

于 2012-08-07T18:33:53.180 に答える
2

それはまさにあなたがそれを解釈する方法です。たとえば、 のように 3 の値を変更しても意味がありません3 == 4

文字列に関する限り、値の可変性は C などの一部の言語で見られますが、Java などの他の言語では見られません。そのため、それらが不変であることは必ずしも明らかではありません。どちらの選択にも賛否両論があります。

于 2012-08-07T18:31:30.763 に答える
1

基本的に、あなたは著者よりも、または少なくとも著者があなたに信用を与えているよりも、違いをよりよく把握しています. あなたの「これまでの考え」はまさにそのとおりですが、彼は、多くの新しいユーザーが文字列プリミティブも変更できることを期待していると考えています。つまり、あなたの期待は、あなたが物事を期待する方法ではなく、言語が実際にどのように動作するかと一致するということです。

于 2012-08-07T18:31:07.233 に答える
1

文字列は JavaScript では不変です。彼は、文字列については「それほど明確ではない」と述べています。私が提供できる最良の説明は、「Bob」という文字列を定義することです。全体の名前を「Cob」にすることはできますが、「B」を「C」に物理的に変更することはできません。これは、内部的には「B」が単なる数字 (char 表現) であるためです。したがって、基本的に「B」=「C」を実行することになります。または SomeNumber = AnotherNumber.

于 2012-08-07T18:32:22.743 に答える