27-単純なデータ型
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
// 简单数据类型 null 返回的是一个空的对象 object
var timer = null;
console.log(typeof timer);
// 如果有个变量我们以后打算存储为对象,暂时没想好放啥, 这个时候就给 null
// 1. 简单数据类型 是存放在栈里面 里面直接开辟一个空间存放的是值
// 2. 复杂数据类型 首先在栈里面存放地址 十六进制表示 然后这个地址指向堆里面的数据
</script>
</head>
<body>
</body>
</html>
将来オブジェクトとして格納する予定の変数があり、それを何に入れるかわからない場合は、現時点で、「null
単純データ型」のスタックに直接格納します。時間値の
単純なデータ型を格納するためのスペースを開きます。スタックに格納されます。スタックに格納されるスペースは、時間値を格納するために直接開かれます。
複雑なデータ型は、最初にアドレスを16進数でスタックに格納し、次にこのアドレスは、ヒープ内のデータを指します。
単純なデータ型:スタックに格納され、格納用のスペースを直接開きます。時間値
複雑なデータ型:最初に16進数で表されたアドレスをスタックに格納し、次にこのアドレスを格納します。ペアのデータを指す
28-単純なデータ型パラメーターの受け渡し
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
// 简单数据类型传参
function fn(a) {
a++;
console.log(a);
}
var x = 10;
fn(x);
console.log(x);
</script>
</head>
<body>
</body>
</html>
function fn(a){a ++; console.log(a);}
function Person(name){this.name = name;}
function f1(x){console.log(x.name); x.name="张学友'; console.log(x.name);}
関数f1(x)【console.log(x.name); x.name="张学友'lconsole.log(x.name);}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script>
// 复杂数据类型传参
function Person(name) {
this.name = name;
}
function f1(x) {
// x = p
console.log(x.name); // 2. 这个输出什么 ? 刘德华
x.name = "张学友";
console.log(x.name); // 3. 这个输出什么 ? 张学友
}
var p = new Person("刘德华");
console.log(p.name); // 1. 这个输出什么 ? 刘德华
f1(p);
console.log(p.name); // 4. 这个输出什么 ? 张学友
</script>
</head>
<body>
</body>
</html>
function Person(name){this.name = name;}
function f1(x){console.log(x.name); x.name =“张学友”; console.oog(x.name);}
JavaScriptの単純型と複雑型
1.単純型と複雑型
単純型は基本データ型または値型とも呼ばれ、複合型は参照型と呼ばれます。
値型:単純データ型/基本データ型、値自体は格納時に変数に格納されるため、値型
文字列、数値、ブール値、未定義、null
参照型と呼ばれます:複合データ型、変数のみ保存時間に格納アドレス(参照)であるため、参照データ型と呼ばれ
ます。Object、Array、Dateなどの新しいキーワードによって作成されたオブジェクト(システムオブジェクト、カスタムオブジェクト)。
単純型は基本データ型、値型とも呼ばれ、複合型は参照疲労と呼ばれます。
値型:単純データ型、基本データ型、およびストレージ変数に格納された値自体
。唯一の時間アドレス、参照データ型、新しいキーワードによって作成されたオブジェクトシステムオブジェクト、カスタムオブジェクトObject、Array、Date;
2.
ヒープとスタックのスタックスペース割り当ての違い:
1。スタック(オペレーティングシステム):オペレーティングシステムによって自動的にパラメータ値を割り当てて解放します関数の値、ローカル変数の値など。その操作方法は、データ構造のスタックに似ています。
単純なデータ型はスタック
2に格納されます。ヒープ(オペレーティングシステム):一般にプログラマーによって割り当てられ解放される複合型(オブジェクト)を格納します。リリースではなく、ガベージコレクションメカニズムのリサイクル。
複素数データ型はヒープに格納されます
スタック:関数のパラメータ値とローカル変数の値は、オペレーティングシステムによって自動的に割り当てられ、解放されます。操作方法は
ヒープに似ています:オペレーティングシステムは複素数型を格納しますオブジェクトは、通常、プログラマーによって割り当てられ、解放されます。複素数型オブジェクトを格納するオペレーティングシステムは、通常、プログラマーによって使用されます
。注:JavaScriptにはスタックの概念はありません。スタックの方法により、簡単になります。誰もがコードのいくつかの実行方法を理解するために、これは将来他の言語を学ぶのに便利です。
JSにはスタックの概念はありません。
3.単純なタイプのメモリ割り当て
値の型(単純なデータ型):文字列、数値、ブール値、未定義、null
値の型の変数のデータは、変数(スタックスペース)に直接格納されます
string、number、boolea、undefined、null
string、number、boolean、undefined 、null
値
型変数のデータは変数スタックスペースに直接格納されます値型変数のデータは変数スタックスペースに直接格納されます
4.複合型のメモリ割り当て
参照型(複雑なデータ型):Object、Array、Date、その他の
参照型変数(スタックスペース)などの新しいキーワードによって作成されたオブジェクト(システムオブジェクト、カスタムオブジェクト)はアドレスを格納し、実際のオブジェクトインスタンスは参照型に格納されますヒープスペース内
:複雑なデータ型、新しいキーワードによって作成されたオブジェクト、システムオブジェクト、カスタムオブジェクト、オブジェクト、配列、日付
オブジェクト、配列、日付
参照型(複雑なデータ型)新しいキーワードによって作成されたオブジェクト、システムオブジェクト、カスタムオブジェクト、オブジェクト、配列、日付
参照型変数、スタックスペースに格納されている時刻アドレス、実オブジェクトインスタンスはヒープスペースに格納されています
参照型(複合データ型):新しいキーワードによって作成されたオブジェクト(システムオブジェクト、カスタムオブジェクト) 、Object、Array、Dateなど
。アドレスは参照型変数(スタックスペース)に格納され、実際のオブジェクトインスタンスはヒープスペースに格納されます。
参照型:複合データ型:新しいキーワードによって作成されたオブジェクト、システムオブジェクト、カスタムオブジェクトオブジェクト、ArraymDate
参照型変数、スタックスペースに格納されている時間アドレス、実オブジェクトインスタンスはヒープスペースに格納されています
5.単純型パラメーターの受け渡し
関数の仮パラメーターも変数と見なすことができます。値型変数をパラメーターとして関数の仮パラメーターに渡す場合、実際にはスタックスペース内の変数の値を仮パラメーターにコピーしてから、メソッド内内部パラメータを変更しても、外部変数には影響しません。
function fn(a) {
a++;
console.log(a);
}
var x = 10;
fn(x);
console.log(x);
関数fn(a){a ++; console.log(a);}
var x = 10;
fn(x);
console.log(x);
function fn(a){a ++; consolelog(a);}
var x = 10;
fn(x);
console.log(x);
6.複合型パラメーターの受け渡し
関数の仮パラメーターも変数と見なすことができます。参照型変数を仮パラメーターに渡すと、実際には、スタックスペース内の変数によって保存されたヒープアドレスが仮パラメーターにコピーされます。実際のパラメータは実際に保存されます。同じヒープアドレスであるため、同じオブジェクトが操作されます。
関数の仮パラメーターも変数と見なすことができます。参照型変数を仮パラメーターに渡すと、スタックスペースの変数によって保存されたヒープアドレスが実際に仮パラメーターにコピーされます。実際のパラメータが保存されます同じヒープアドレス、操作時の同じオブジェクト
function Person(name) {
this.name = name;
}
function f1(x) {
// x = p
console.log(x.name); // 2. 这个输出什么 ?
x.name = "张学友";
console.log(x.name); // 3. 这个输出什么 ?
}
var p = new Person("刘德华");
console.log(p.name); // 1. 这个输出什么 ?
f1(p);
console.log(p.name); // 4. 这个输出什么 ?
関数の仮パラメーターも変数と見なすことができます。参照型変数を仮パラメーターに渡すと、実際には、スタックスペース内の変数によって保存されたヒープアドレスが仮パラメーターにコピーされます
。関数も表示されます。これは変数です。参照型変数を仮パラメーターに渡すと、スタックスペースの変数によって保存されたヒープアドレスが実際に仮パラメーターにコピーされます。
実際には、保存されたヒープアドレスがコピーされます。スタックスペース内の変数から仮パラメーターへ。仮パラメーター、仮パラメーター、および実パラメーターは実際には同じヒープアドレスを保存するため、操作は同じオブジェクトです。