JavaScript入门第十九章(JS补充知识点)

  • 4.内存主要有两部分:栈与堆

2.共享引用


  • JS中实际对象传值不是真正的引用传值(传地址),而是传递引用的副本(call by sharing):按共享传递

  • 对象赋值的本质是对象引用的副本

  • 保存副本的对象如果是对对象本身进行操作:那么就是引用(操作原对象)

  • 保存副本的对象如果是重新赋值:那么就重新开辟存储空间

// 1.对象共享传递

var obj1 = { name: ‘我是本体’ };

// 2.对象引用(共享)

var obj2 = obj1;

var obj3 = obj1;

// 3.引用的改变效果:如果操作的是对象本身(属性或者方法)那么操作的是原对象obj1,如果把保存引用的变量赋值其他任何类型数据,那么都会重开内存(不影响obj1)

obj2.name = ‘我是新本体’; // obj2操作的是obj1本身的对象,所以修改是共用的(不开辟新空间)

console.log(obj1); // {name: “我是新本体”}

obj3 = 1; // obj3独立开辟内存空间保存1,与obj1和obj2不再有关联

console.log(obj1); // {name: “我是新本体”}

// 共享引用:共享引用是JS中复杂数据类型的本质传递方式而已

3.基本包装类型


  • 本身是基本数据类型,但是在执行代码的过程中,可以调用相关的属性和方法

  • JS中有三种基本包装类型

  • Number

  • String

  • Boolean

/*

// 问题:为什么num是一个基本数据类型,可以像对象一样调用方法呢?

// 基本数据类型

var num = 10;

console.log ( typeof num );

num.toString () ;

/*

本质相当于执行了以下代码(JS解释器检测到num调用来toString()方法,所以快速处理了)

(1) var num = new Number(10); // 创建对象

(2) num.toString(); // 调用对象方法

(3) num = null; // 删除对象

*/

// 对象类型

var num1 = new Number(10);

/*

由于num1本身就是对象类型,所以这里可以直接调用,无需转换

*/

num1.toString();

console.log ( num1 );

console.log ( typeof num1 ); // object

var str = ‘111’;

str.toString();

/*

(1)var str = new String(‘111’);

(2)str.toString();

(3)str = null;

*/

var bol = true;

bol.toString();

/*

(1) var bol = new Boolean(true);

(2) bol.toString();

(3) bol = null();

*/

/*

基本包装类型和引用类型(new Number()/String()/Boolear()的区别

1.new产生的对象是长期占用内存,直到脚本结束

2.基本包装类型属于后台瞬发,用完就销毁了对象:对象 = null

所以:String/Number/Boolean,我们在开发中都是使用基本包装类型

*/

4.数组去重


数组去重:将数组中重复的元素去掉

  • JS数组没有删除具体元素的删除(只能删掉值,删不掉元素的索引),可以使用另外一个结构来进行存储

  • 新数组

  • 新对象

  • JS数组虽然本质可以删除第一个和最后一个元素,可以利用这一特性,交换当前重复的元素到最后,然后进行删除(pop() 或者length–)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值