@Noa_SyrayaSol (久枝 佐一)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

[質問]JavaScript - `new String()`等のコンストラクタについて

解決すべき問題があるというわけではないのですが、疑問に思ったので質問させていただきます。

JavaScriptでは「プリミティブデータ型としてのstring」と「オブジェクトとしてのString」は区別されているものと思います。

new String()のようにコンストラクタを使用すると文字列のプリミティブデータではなく、Stringオブジェクトが生成されるようですが、MDNのリファレンスを見ていると「警告: String をコンストラクターとして使用する場面はほとんど見つからないでしょう。」とあります(new Number()も同様ですね)。

なぜnew String()のようにnew付きコンストラクタがほぼ使われないかというのは、「プリミティブ型データに対してメソッドを呼んだりプロパティを参照するような文脈では自動的にラッパークラスで包まれ、そのラッパークラスオブジェクトに対してメソッドを呼んだりプロパティを参照する」のでそもそも「明示的に(new付きコンストラクタで)ラッパークラスオブジェクトを生成してやるような必要性がない」からだと考えたのですが、実際のところなぜnew付きコンストラクタはほぼ使われないのでしょうか?

用語の使い方が間違っていたり、概念を混同してしまったりしているところがあるかもしれず申し訳ありませんが、ご教示いただけると幸いです。

0 likes

1Answer

null と undefined 意外の primitive は Object(primitiveValue) で ラッパーオブジェクトが取得できるからでしょうか……?(新しめのプリミティブである Symbol や BigInt はそもそも 構文上 new できませんし……

0Like

Comments

  1. @Noa_SyrayaSol

    Questioner

    @juner さん
    ご回答ありがとうございます。

    なるほど、Object()コンストラクタの存在は知りませんでした...。
    私自身、学習&プログラミング歴が短いのでそういった機会が無いだけなのだと思いますが、そもそも明示的に文字列や数値のラッパーオブジェクトを生成して取得したいタイミングというのはあるものなのでしょうか?

Your answer might help someone💌