2017-05-11 9 views
1

ここで何が起こっているのかをよく理解するための明確な説明が大好きです。Object()で数値と文字列を作成する

Objectでプリミティブ型のような外観を作成できます。数字のように見えますが、文字列にはあまりありません。私は、Object()がjs(オブジェクト型)のすべてのオブジェクトを作成するのに使用されたが、number、string booleanなどのプリミティブ型は作成していなかったという印象を受けました。

enter image description here

+0

これは、すべてのプリミティブがメソッドを提供するために使用するのと同じラッパーです。 – dandavis

+0

[ここではMDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object)に記載されているように* Objectコンストラクタはオブジェクトラッパーを作成します。 –

答えて

1

一時的ではあるが、プリミティブ型(ブール値、数値または文字列)をオブジェクトに変換する必要があることがあります。

この例を見て:

var str = 'javascript'; 
str = str.substring(4);// You get "script" but how? 

どのようにして目的ではない何かに関数を呼び出すことができますか?その理由は、プリミティブ値がsubstring()メソッドが定義されているObject(String)にラップされているためです。完了していなければ、プリミティブ型でメソッドを呼び出すことはできません。そのようなラッパーはPrimitive Wrappersと呼ばれます。 また、strがオブジェクトになったことを意味しません。したがって、あなたが言った場合:

str.myProp = 10; 
and then console.log(str.myProp);//You would get undefined 

リファレンスタイプとプリミティブラッパーオブジェクトの違いは、ライフタイムです。プリミティブラッパーはすぐに死ぬ。

ですから、これらの行として

var str = 'javascript'; 
str = str.substring(4);// You get "script" but how? 

と考えることができます:

var str = new String(“javascript”); 
str = str.substring(4); 
str = null; 

は今、あなたは何をしているかに来る:

数=オブジェクト(5)。

ここでは、数値プリミティブをオブジェクトにラップしています。あなたが書いたかのようです。 番号=新しい番号(5);

ここで、Object(5)はファクトリとして動作し、入力の種類(数値、文字列)に応じて、プリミティブの値をラップすることでオブジェクトを返します。

したがって、Object(5)new Number(5)に相当し、オブジェクト( 'test')はnew String('test')と同じです。

希望すると便利です。

+0

ありがとうございました。 – Yunti

+0

@Yunti助けたら答えを受け入れてください! :) –

0
5.toString(); 

あなたはがオブジェクトである見ることができるように。しかし、番号ではありません。いくつかのケースではプリミティブは、行動のようなオブジェクトを実装するオブジェクトによって包ま...

5 // primitive type 
Object(5) // wrapper of that primitive type 
5.toString() === Object(5).toString() //... 
0

はあなたが[[PrimitiveValue]]5または"test"を取得するためにObject.prototype.valueOf()を使用することができます。

var number = new Object(5); 
 
var aString = new Object("test"); 
 
console.log(number.valueOf(), aString.valueOf());

1

プリミティブとオブジェクトの概念が少し実装依存です。しかし、あなたはこのように考えることができます:

プリミティブはオブジェクトではありません。彼らは文字列 "こんにちは" 同じ何回作成するに関係なく、独自の特別な意味を持っています。ただし、オブジェクトnew String("hello")は毎回新しい文字列を返す必要があります。

多くの実装では、オブジェクトのように動作する必要があるときにプリミティブの自動ボックス化とアンボックス化があります。逆もまた同様です。 What is the difference between string literals and String objects in JavaScript?

+0

Pankaj Shuklaが上記の寿命を理解するのに非常に役立つリンクをありがとう。 – Yunti

関連する問題