変数には2種類の値、基本型の値(primitive values)と参照型の値(reference values)を格納できます。
ES6 は新しいプリミティブデータ型 Symbol を導入しました。これは唯一無二の値を表します。これは JavaScript 言語の7番目のデータ型で、最初の6つは Undefined、Null、ブール値(Boolean)、文字列(String)、数値(Number)、オブジェクト(Object)です。
基本型
JavaScript には6つの基本データ型があります:Undefined、Null、Boolean、Number、String、Symbol (new in ES 6) !
取り決め:基本データ型はプリミティブデータ型と同じ意味です。
基本データ型の値は値によってアクセスされます。
-
基本型の値は不変です
var str = "123hello321"; str.toUpperCase(); // 123HELLO321 console.log(str); // 123hello321
-
基本型の比較はそれらの値の比較です
var a = 1; var b = true; console.log(a == b); // true console.log(a === b); // false
上記の a と b のデータ型は異なりますが、それでも値の比較ができます。これは比較の前に、データ型の暗黙的な変換が自動的に行われるためです。
== : 値の比較のみを行います
=== : 値の比較だけでなく、データ型の比較も行います
-
基本型の変数はスタックメモリ(Stack)に格納されます
var a,b; a = "zyj"; b = a; console.log(a); // zyj console.log(b); // zyj a = "呵呵"; // 改变 a 的值,并不影响 b 的值 console.log(a); // 呵呵 console.log(b); // zyj
図は以下の通りです:スタックメモリには変数の識別子と変数の値が含まれます
参照型
上記の6つの基本データ型を除くと、残りは参照型で、総称して Object 型と呼ばれます。さらに細分化すると、Object 型、Array 型、Date 型、RegExp 型、Function 型 などがあります。
参照型の値は参照によってアクセスされます。
-
参照型の値は変更可能です
var obj = {name:"zyj"}; // 创建一个对象 obj.name = "percy"; // 改变 name 属性的值 obj.age = 21; // 添加 age 属性 obj.giveMeAll = function(){ return this.name + " : " + this.age; }; // 添加 giveMeAll 方法 obj.giveMeAll(); -
参照型の比較は参照の比較です
var obj1 = {}; // 新建一个空对象 obj1 var obj2 = {}; // 新建一个空对象 obj2 console.log(obj1 == obj2); // false console.log(obj1 === obj2); // falseobj1 と obj2 はそれぞれヒープメモリに格納された2つの異なるオブジェクトを参照しているため、変数 obj1 と obj2 の値(参照アドレス)も異なります!
-
参照型の値はヒープメモリ(Heap)に保存されるオブジェクト(Object)です
他のプログラミング言語とは異なり、JavaScript はオブジェクトのメモリ空間(ヒープメモリ)を直接操作できません。var a = {name:"percy"}; var b; b = a; a.name = "zyj"; console.log(b.name); // zyj b.age = 22; console.log(a.age); // 22 var c = { name: "zyj", age: 22 };
図は以下の通りです:
スタックメモリには変数の識別子と、ヒープメモリ内のそのオブジェクトを指すポインタが保存されます
ヒープメモリにはオブジェクトの内容が保存されます
型の判定
-
typeof:よく使われるのは、変数が最も基本的なデータ型であるかどうかを判定することです
var a; typeof a; // undefined a = null; typeof a; // object a = true; typeof a; // boolean a = 666; typeof a; // number a = "hello"; typeof a; // string a = Symbol(); typeof a; // symbol a = function(){} typeof a; // function a = []; typeof a; // object a = {}; typeof a; // object a = /aaa/g; typeof a; // object -
instanceof:これは、あるコンストラクタの prototype プロパティが指すオブジェクトが、検証したい別のオブジェクトのプロトタイプチェーン上に存在するかどうかを判定するために使われます
簡単に言うと、参照型の変数が具体的にある種類のオブジェクトであるかどうかを判定することです
({}) instanceof Object // true ([]) instanceof Array // true (/aa/g) instanceof RegExp // true (function(){}) instanceof Function // true
原文アドレス:https://segmentfault.com/a/1190000006752076