4

JavaScriptでプリミティブ型とオブジェクトラップ型の両方の値型(Number、String、Booleanなど)がどのように問題を引き起こすかを詳しく説明したブログ投稿を少し前に書きました。オブジェクトでラップされたNaN、 ""およびfalseは、実際にはtrueに型キャストされます)。

私の質問は、このような混乱と問題のすべてを踏まえて、組み込みクラスに両方のタイプの値を持つJavaScriptに何か利点はありますか?

編集:迅速な回答をありがとう。JavaScriptの作成者は、スカラー値を作成する方法としてラップされたネイティブを意図していたと思いますが、それは明らかに裏目に出て、より多くの問題を引き起こします。

4

3 に答える 3

5

Douglas Crockfordによると、これらは決して有用ではありません。

型付きラッパーは完全に不要であり、混乱を招くことがあります。new Booleanまたはを使用しないでnew Numberくださいnew String

出典:JavaScript:良い部分-付録B:悪い部分(ページ114)。

彼は、 ECMAScript仕様の第4版の廃止を推奨しました。

于 2010-05-02T10:50:14.523 に答える
0

JavaScriptは、多くの言語と同様に、良い部分と悪い部分があります。

これは本当に悪い部分の1つです。

私見ですが、型付きラッパーからのメリットはそれほど多くなく、害があるだけです。

私たちの友人であるダグラス・クロックフォードはこの問題のすべてに取り組んできました。実際、彼は初日からそれに反対してきました。あなたが知る必要があるのはそれだけです。

于 2010-05-02T10:52:20.813 に答える
0

ダグラス・クロックフォードは、世の中で最も賢い人の1人ですが、神ではありません。彼の言うことすべてに盲目的に従うべきではありません。実際、プリミティブ型よりもラッパーを優先したい状況が1つあります。参照によって値を渡したい場合です。

プリミティブ値は常に値によって渡され、オブジェクトは参照によって渡されます。したがって、何らかの理由で参照によって数値を渡す必要がある場合は、Numberオブジェクトを使用してそれを行うことができます。参照(AFAIK)を失うことなく数値の値を実際に変更することはできませんが、他のオブジェクトと同様に、任意にパラメーターを追加できます。これは、プリミティブ数値ではサポートされていないことです。

var nr1 = new Number(123),
    nr2 = nr1; // reference to nr1
nr1.name = "number"; //parameter "name" for nr1 is set AFTER the initialization of nr2
alert(nr2.name); // nr2 has the same parameter as nr1
于 2010-05-02T11:30:02.680 に答える