add:堆内存和栈内存
This commit is contained in:
		
							parent
							
								
									2e56826739
								
							
						
					
					
						commit
						8d177fe629
					
				@ -124,20 +124,20 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
        var obj = new Object();
 | 
			
		||||
    var obj = new Object();
 | 
			
		||||
 | 
			
		||||
        //向obj中添加一个name属性
 | 
			
		||||
        obj.name = "孙悟空";
 | 
			
		||||
    //向obj中添加一个name属性
 | 
			
		||||
    obj.name = "孙悟空";
 | 
			
		||||
 | 
			
		||||
        //向obj中添加一个gender属性
 | 
			
		||||
        obj.gender = "男";
 | 
			
		||||
    //向obj中添加一个gender属性
 | 
			
		||||
    obj.gender = "男";
 | 
			
		||||
 | 
			
		||||
        //向obj中添加一个age属性
 | 
			
		||||
        obj.age = 18;
 | 
			
		||||
    //向obj中添加一个age属性
 | 
			
		||||
    obj.age = 18;
 | 
			
		||||
 | 
			
		||||
        // 获取对象中的属性,并打印出来
 | 
			
		||||
        console.log(obj.gender); // 打印结果:男
 | 
			
		||||
        console.log(obj.color);  // 打印结果:undefined
 | 
			
		||||
    // 获取对象中的属性,并打印出来
 | 
			
		||||
    console.log(obj.gender); // 打印结果:男
 | 
			
		||||
    console.log(obj.color);  // 打印结果:undefined
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -172,7 +172,7 @@
 | 
			
		||||
 | 
			
		||||
对象的属性名不强制要求遵守标识符的规范,但是我们使用是还是尽量按照标识符的规范去做。
 | 
			
		||||
 | 
			
		||||
但如果要使用特殊的属性名,不能采用`.`的方式来操作。比如说,`123`这种属性名,如果我们直接写成`obj.123 = 789`,是会报错的。那怎么办呢?办法如下:
 | 
			
		||||
但如果要使用特殊的属性名,就不能采用`.`的方式来操作对象的属性。比如说,`123`这种属性名,如果我们直接写成`obj.123 = 789`,是会报错的。那怎么办呢?办法如下:
 | 
			
		||||
 | 
			
		||||
需要使用另一种方式。语法格式如下:(读取时,也是采用这种方式)
 | 
			
		||||
 | 
			
		||||
@ -189,7 +189,7 @@
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
**重要**:使用`[]`这种形式去操作属性,更加的灵活,,因为,我们可以在`[]`中直接传递一个**变量**,这样变量值是多少就会读取那个属性。
 | 
			
		||||
**重要**:使用`[]`这种形式去操作属性,更加的灵活,因为,我们可以在`[]`中直接传递一个**变量**,这样变量值是多少就会读取那个属性。
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### 属性值:js中的属性值,可以是一个对象
 | 
			
		||||
@ -239,12 +239,15 @@ JS对象的属性值,可以是任意的数据类型,甚至也**可以是一
 | 
			
		||||
 | 
			
		||||
## 对象字面量
 | 
			
		||||
 | 
			
		||||
创建一个对象:
 | 
			
		||||
如果要创建一个对象,我们可以使用下面这种方式:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
	var obj = new Object();
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
但是上面的这种方式,比较麻烦,我们还有更简洁的方式来创建一个对象。如下。
 | 
			
		||||
 | 
			
		||||
使用对象字面量来创建一个对象:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
@ -265,7 +268,7 @@ JS对象的属性值,可以是任意的数据类型,甚至也**可以是一
 | 
			
		||||
		test: {
 | 
			
		||||
			name: "沙僧"
 | 
			
		||||
		}
 | 
			
		||||
		//在对象中增加一个方法。以后可以通过obj2.sayName()来调用
 | 
			
		||||
		//我们还可以在对象中增加一个方法。以后可以通过obj2.sayName()的方式调用这个方法
 | 
			
		||||
		sayName: function(){
 | 
			
		||||
			console.log('smyhvae');
 | 
			
		||||
		}
 | 
			
		||||
@ -275,7 +278,7 @@ JS对象的属性值,可以是任意的数据类型,甚至也**可以是一
 | 
			
		||||
 | 
			
		||||
对象字面量的属性名可以加引号也可以不加,建议不加。如果要使用一些特殊的名字,则必须加引号。
 | 
			
		||||
 | 
			
		||||
属性名和属性值是一组一组的键值对结构,键和值之间使用`:`连接,多个值对之间使用`,`隔开。如果一个属性之后没有其他的属性了,就不要写`,`
 | 
			
		||||
属性名和属性值是一组一组的键值对结构,键和值之间使用`:`连接,多个值对之间使用`,`隔开。如果一个属性之后没有其他的属性了,就不要写`,`,因为它是对象的最后一个属性。
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## 我的公众号
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										72
									
								
								03-JavaScript基础/08-基本数据类型vs引用数据类型.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								03-JavaScript基础/08-基本数据类型vs引用数据类型.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,72 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## 前言
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
在之前的**javascript基础**文章中(编号02、编号07),我们介绍过,变量有以下数据类型:
 | 
			
		||||
 | 
			
		||||
- **基本数据类型(值类型)**:String 字符串、Number 数值、Boolean 布尔值、Null 空值、Undefined 未定义。
 | 
			
		||||
 | 
			
		||||
- **引用数据类型(引用类型)**:Object 对象。
 | 
			
		||||
 | 
			
		||||
本文,我们针对这两种类型,做个详细介绍。我们先来看个例子。
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
**基本数据类型举例**:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
    var a = 23;
 | 
			
		||||
    var b = a;
 | 
			
		||||
 | 
			
		||||
    a++;
 | 
			
		||||
 | 
			
		||||
    console.log(a); // 打印结果:24
 | 
			
		||||
    console.log(b); // 打印结果:23
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
上面的代码中:a 和 b 都是基本数据类型,让 b 等于 a,然后**改变 a 的值之后,发现 b 的值并没有被改变**。
 | 
			
		||||
 | 
			
		||||
但是在引用数据类型中,就不同了,我们来看一看。
 | 
			
		||||
 | 
			
		||||
**引用数据类型举例**:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
    var obj1 = new Object();
 | 
			
		||||
    obj1.name = 'smyh';
 | 
			
		||||
 | 
			
		||||
    // 让 obj2 等于 obj1
 | 
			
		||||
    var obj2 = obj1;
 | 
			
		||||
 | 
			
		||||
    // 修改 obj1 的 name 属性
 | 
			
		||||
    obj1.name = 'vae';
 | 
			
		||||
 | 
			
		||||
    console.log(obj1.name); // 打印结果:vae
 | 
			
		||||
    console.log(obj2.name); // 打印结果:vae
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
上面的代码中:obj1 和 obj2 都是引用数据类型,让 obj2 等于 obj1,然后**修改 obj1.name 的值之后,发现 obj2.name 的值也发生了改变**。
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
从上面的例子中,可以反映出,基本数据类型和引用数据类型是有区别的。
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## 栈内存和堆内存
 | 
			
		||||
 | 
			
		||||
我们首先记住一句话:JS中,所有的**变量**都是保存在**栈内存**中的。
 | 
			
		||||
 | 
			
		||||
然后来看看下面的区别。
 | 
			
		||||
 | 
			
		||||
**基本数据类型**:
 | 
			
		||||
 | 
			
		||||
基本数据类型的值,直接保存在栈内存中。值与值之间是独立存在,修改一个变量不会影响其他的变量。
 | 
			
		||||
 | 
			
		||||
**引用数据类型**:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
对象是保存到堆内存中的。每创建一个新的对象,就会在堆内存中开辟出一个新的空间,而**变量保存了对象的内存地址**(对象的引用)。如果两个变量保存了同一个对象的引用,当一个通过一个变量修改属性时,另一个也会受到影响。
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user