变量、作用域与内存问题-----类型

本文探讨了JavaScript中基本类型如number、boolean和string与引用类型如对象的存储机制,包括值比较、内存分配、函数传参和类型检测。重点讲解了引用类型比较的是内存地址而非值,并通过实例解析了函数参数传递的原理。
摘要由CSDN通过智能技术生成

本篇先讲类型,作用域与内存比较复杂分为两篇来讲

一.基本类型与引用类型

1、基本类型指的是简单的数据段(存储在栈中)

number、boolean、string、null、undefined

2、基本类型的比较是值的比较

var v = 1;
var c = true;
console.log(1==true);
var a = 'purpro';
var b = 'purpro';
console.log(a === b);//true

由上面可知,基本类型的比较只比较值。

3.基本类型的变量是存放在栈内存中的,当变量传值时,内存中产生新的副本。

4.引用类型:有多个值构成的对象,引用类型的值是可变的

```jsx
var obj = {
	a: 1,
    b: 2,    
    c: 3    
};
delete obj.a;
console.log(obj.a)  //undefined

5.引用类型的比较是引用的比较,即在判断相等的时候,判断的是***引用地址是否相等***,也就是说会比较是否是内存中的同一个东西。

var obj1 = {
	a: 1,
    b: 2,
    c: 3
};
var obj2 = {
   a: 1,
   b: 2,
   c: 3
};
console.log(obj1 == obj2);      // false
console.log(obj1 === obj2);     // false
// 在进行引用类型值得的== === 时,JS会比较两个对象是不是内存中的同一个对象
console.log({} == {});          // false
console.log({} === {});         // false
// 两个空对象在内存中不同的区域


注:不可以直接访问堆内存空间中的位置和操作堆内的空间,只能通过操作对象在堆内存中的引用地址

                  

 

7.传递参数

(1)所有函数的传参都是按值传递,即函数外部的值复制给函数内部参数

  • 基本类型如同基本类型复制(复制值本身)
  • 引用类型如同引用类型复制(复制内存中指向的地址)

先来思考一个问题,输出obj是什么?

function fun(num){
//num是obj在内存中的地址的副本,在内存中和obj指向同一个对象,所以num添加name,相当于obj添加name
 num.name = "张三";
//另外的索引,跟obj无关
 num = new Object();
    num.name="李四"
}
var obj = new Object();
fun(obj);
console.log(obj);

3,2,1…

{name: '张三'}

解释一下:虽然obj是一个对象,一个引用类型,但传值的时候,传递的是复制之后的对象,给对象一个name的属性,再重新创建一个对象叫num,此时相当于在堆栈中开辟一个另外的空间,也叫num,这个num的name叫做李四,所以我们输出外面的obj,他添加的name是张三。这说明即使在函数内部修改了参数的值,但原始的引用仍然未改变。实际上,当在函数内部重写obj时,这个变量引用的就是另外一个局部变量了。而这个局部变量会在函数执行完毕之后立即销毁。

8.检测类型

typeof检测null,数组和对象,都会返回Object.

                ​​​​​​​        ​​​​​​​        

 

那么怎样区分数组和对象呢?

使用instanceof区分对象和数组

        ​​​​​​​        ​​​​​​​         

下一篇预告:

Js执行环境与作用域

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值