ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript のプリミティブ値と複雑な値_javascript のヒント

JavaScript のプリミティブ値と複雑な値_javascript のヒント

WBOY
WBOYオリジナル
2016-05-16 15:21:241123ブラウズ

前の単語

JavaScript のデータ型は、プリミティブ型と参照型の 2 つの型に分類できます。プリミティブ型は、基本型または単純型とも呼ばれます。JavaScript の基本データ型には、Unknown、Null、Boolean、Number、および String が含まれます。参照型は、JavaScript ではオブジェクトと呼ばれます。対応して、それらの値はそれぞれプリミティブ値および複素値とも呼ばれます

特徴

プリミティブ値

簡単に言うと、プリミティブ値は固定の単純な値であり、スタックに格納される単純なデータセグメントです。つまり、それらの値は変数アクセスの場所に直接格納されます。

プリミティブ値は、JavaScript で利用可能なデータまたは情報を表す最も低い、ま​​たは最も単純な形式です。プリミティブ型の値は絞り込むことができないため、プリミティブ値と呼ばれます。つまり、数値は数値であり、文字は文字であり、ブール値は true または false、null と unknown は null と unknown です。値自体は単純であり、他の値から構成される値を表すことはできません

プリミティブ型とはどのような型ですか?

プリミティブ型には次の 5 つの型があります: Unknown、Null、Boolean、Number、String

typeof を使用して、型が特定の型の範囲内にあるかどうかを判断できます。

演算子の種類

変数または値に対して typeof 演算子を使用すると、次のいずれかの値が返されます:

注:

1. 戻り値は文字列型です。

2. 元の型と比較すると、null の違いがまだあります。typeof(null) を使用すると、null がオブジェクトのプレースホルダーとして返されます。

複素数値

複雑な値は、さまざまな種類の JavaScript オブジェクトで構成できます。複合オブジェクトには特定の既知の値ではなく任意の値を含めることができるため、メモリ内の複合オブジェクトのサイズは不明です

保存方法

スタックストレージ

元の値は固定領域を占有し、単純なデータセグメントであるため、変数クエリの速度を向上させるために、スタックに格納されます

ヒープストレージ

複素数の値はサイズが変化するためスタックに格納できず、変数クエリの速度が低下するため、変数に格納される値はヒープ(heap)に格納されます。ストレージ オブジェクトを指すポインタ メモリの場所

アクセス方法

値によるアクセス

プリミティブ値は非還元値として保存および操作され、それらを参照すると値が転送されます

var myString = 'foo';
var myStringCopy = myString;
var myString = null;
console.log(myString,myStringCopy);//null,'foo' 

見積訪問

複雑な値は、実際の値ではなく参照によって保存および操作されます。複雑なオブジェクトを含む変数を作成すると、その値はメモリ内の参照アドレスになります。複雑なオブジェクトを参照する場合、その名前 (つまり、変数またはオブジェクトのプロパティ) を使用して、メモリ内の参照アドレスを通じてオブジェクトの値を取得します

var myObject = {};
var copyOfMyObject = myObject;//没有复制值,而是复制了引用
myObject.foo = 'bar';//操作myObject中的值
//现在如果输出myObject和copyOfMyObject,则都会输出foo属性,因为它们引用的是同一个对象
console.log(myObject,copyOfMyObject);//Object{foo="bar"} 

比較

プリミティブ値は値比較を使用し、複雑な値は参照比較を使用します。複素数値は、同じオブジェクトを参照する (つまり、同じアドレスを持つ) 場合にのみ等しくなります。同じオブジェクトを含む 2 つの変数であっても、同じオブジェクトを指していないため、互いに等しくありません

var price1 = 10;
var price2 = 10;
var price3 = new Number('10');
var price4 = price3;
console.log(price1 == price2);//true
console.log(price1 == price3);//false
price4 = 10;
console.log(price4 == price3);//true
console.log(price4 === price3);//false 
var objectFoo = {same:'same'};
var objectBar = {same:'same'};
console.log(objectFoo == objectBar);//false
var objectA = {foo: 'bar'};
var objectB = objectA;
console.log(objectA == objectB);//true 

動的属性

複雑な値の場合、プロパティとメソッドを追加したり、そのプロパティやメソッドを変更したり削除したりすることもできますが、単純な値の場合はプロパティやメソッドを追加できません。

複雑な値は動的なオブジェクト プロパティをサポートします。オブジェクトを定義し、参照を作成してからオブジェクトを更新すると、オブジェクトを指すすべての変数が更新されるためです。新しい変数は既存の複合オブジェクトを指しますが、そのオブジェクトはコピーされません。複素数値が参照値と呼ばれることがあるのはこのためです。複素数値は必要なだけ参照を持つことができ、オブジェクトが変更された場合でも常に同じオブジェクトを指します


var str = 'test';
str.property = true;
console.log(str.property);//undefined  
var objA = {property: 'value'};
var pointer1 = objA;
var pointer2 = pointer1;
objA.property = null;
console.log(objA.property,pointer1.property,pointer2.property);//null null null 

梱包タイプ

コンストラクターによって作成されたオブジェクトとしてプリミティブ値が使用される場合、JavaScript はオブジェクトのプロパティとメソッドを使用できるようにそれをオブジェクトに変換し、オブジェクトのプロパティを破棄してプリミティブ値に戻します。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。