前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >第183天:引用类型和值类型

第183天:引用类型和值类型

作者头像
半指温柔乐
发布于 2018-09-11 01:46:15
发布于 2018-09-11 01:46:15
40900
代码可运行
举报
文章被收录于专栏:前端知识分享前端知识分享
运行总次数:0
代码可运行

一、内存分配

1、数值型内存分配

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 <script>
 2     var num1; //这个时候不进行内存分配
 3     var num3=9;//分配内存
 4     var num4=num3;//会不会分配
 5 
 6      //  这里到底分配还是不分配内存??
 7      // 答案 --分配内存 彼此拥有独立的内存空间,互不影响
 8     console.log(num3);
 9     console.log(num4);
10 
11     num3=3333333;
12     num4=4444444;
13     console.log(num3);
14     console.log(num4); //当更改数据,值不一样的本质是这里分配两个空间独立存储
15 
16 
17 </script>

2、字符串内存分配

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 <script>
 2     //字符串
 3     var str1; //这个时候不进行内存分配
 4     var str2 = '乐乐'; //分配内存
 5     var str3=str2; //问题,这里str3 会不会分配内存??
 6     
 7     //答案:会
 8     console.log(str1);
 9     console.log(str2);
10     console.log(str3);
11     console.log(str2===str3); //比较的是指针指向的内存空间中存储的值
12 
13     str2 ='lalala222222222';
14     str3 ='lalala333333333';
15     console.log(str2);//lalala222222222
16     console.log(str3);//lalala333333333
17 </script>

3、数组内存分配

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 <script>
 2     //    数组 : 当定义一个新数组,
 3     // 内存会产生两片区域,一个存储变量,一个存储数组 变量中保存的只是数组所在的地址
 4     var arr1=['乐乐','淘淘'];//分配内存
 5     //引用类型其实是指向同一个地址,也就是操纵的其实是同一个位置
 6     var arr2=arr1;   //问题:这里arr2会不会分配内存
 7     console.log(arr1[0]);//乐乐
 8     console.log(arr2[0]); //乐乐   一样
 9 
10 
11     //修改数组1
12     arr2[0]='水浒传 西游记 三国演义 红楼梦';
13     console.log(arr1[0]);//水浒传 西游记 三国演义 红楼梦
14     console.log(arr2[0]);//水浒传 西游记 三国演义 红楼梦
15 
16     //一样 说明这里不分配内存,其实arr2变量中存的是地址,指向arr1内存
17 
18 </script>

4、函数内存分配

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 <script>
 2 
 3 //    系统都会在内存中生成两个区域:一个存储变量,一个用来存储函数
 4 //    而变量中存放的只是函数空间所在的地址(指针)
 5 //    由于函数是对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定。
 6 //由于函数名仅仅是指向函数的指针,
 7 //因此函数名与包含对象指针的其他变量没有什么不同。
 8 //换句话说,一个函数可能会有多个名字,例如:
 9 function sum(num1,num2)
10     {
11         return num1 + num2;
12     }
13 console.log(sum(10,10)); //20
14 
15 var anotherSum = sum;
16 
17  //内存是如何分配的? 这里不会在内存生成新的空间,存储函数,而是生成一个变量,变量中保存的是同一个地址
18 sum = null;//这里只是将sum变量中原来保存的是函数地址,然后赋值成null,这样做并不会影响到函数对象对应的内存空间
19 console.log(anotherSum(10,10)); //20
20 console.log(sum(10,10)); //20
21     
22 </script>

二、引用类型和值类型总结

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 <script>
 2     function show(x) {
 3         console.log(typeof(x));    // undefined 值类型
 4         console.log(typeof(10));   // number 值类型
 5         console.log(typeof('abc')); // string 值类型
 6         console.log(typeof(true));  // boolean 值类型
 7         console.log(typeof(function () { })); //function 函数 引用类型
 8         console.log(typeof([1, 'a', true]));  //object 数组  引用类型
 9         console.log(typeof ({ a: 10, b: 20 }));  //object 或者json  引用类型
10         console.log(typeof (null));  //object   null  引用类型
11         console.log(typeof (new Number(10)));  //object  内置对象 引用类型
12     }
13     show();
14 //    其中上面的四种(undefined, number, string, boolean)属于值类型,不是对象。
15 //    函数、数组、对象、null、new Number(10)都是对象。他们都是引用类型。
16 
17     var test ={name:'lele'};
18     var test2=  test;
19     console.log(test === test2);//true
20     test.name='lala';
21     console.log(test2.name);//lala
22 
23 </script>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-03-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
面试题:深拷贝和浅拷贝(超级详细,有内存图)
深拷贝和浅拷贝是经常在面试中会出现的,主要考察你对基本类型和引用类型的理解深度。我在无数次的面试中,应聘者还没有一个人能把这个问题回答情况,包括很多机构的培训老师。这篇文章会让你把基本类型和引用类型的区别搞得清清楚楚,搞清楚这两者的区别,你对任何编程语言的都不怕,因为,这不是js一门语言,是任何编程语言中都需要掌握的知识,而且,在任何编程语言中,两者都是一样的。
全栈程序员站长
2022/11/10
5060
面试题:深拷贝和浅拷贝(超级详细,有内存图)
前端day11-JS学习笔记(构造函数、对象的API、作用域、arguments关键字)
当我们想要创建多个对象时很容易造成代码冗余,那么我们可以使用函数或者自定义构造函数去创建对象。
帅的一麻皮
2020/04/11
8450
前端day11-JS学习笔记(构造函数、对象的API、作用域、arguments关键字)
JavaScript-ECMAScript5-JS基础语法「建议收藏」
更多参看MDN: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/JavaScript_technologies_overview
全栈程序员站长
2022/09/22
1.3K0
JavaScript-ECMAScript5-JS基础语法「建议收藏」
JavaScript基本类型与引用类型(二)
前文已经对基本类型和引用类型作了简单的介绍,本文将进一步介绍基本类型和引用类型。 基本包装类型   为了方便操作基本类型的值,JavaScript提供了特殊的引用类型:Boolean、Number、String。这些类型与其他的引用类型相似,但是也具有各自的基本类型的特殊行为。每读取一个基本类型,后台都会创建一个对应的基本包装类型的对象。 1 var str="hello world"; 2 var str1=str.substring(0,3); 3 console.log(str1);   上面的
水击三千
2018/02/27
6580
JavaScript学习笔记016-字符串方法0数组方法0值类型与引用型
Author:Mr.柳上原 付出不亚于任何的努力 愿我们所有的努力,都不会被生活辜负 不忘初心,方得始终 有没有做过一件后悔的事 后悔到骨子里去了 以至于每次想起 心都很痛很痛的 所以 当想要做一件明知道不对的事情的时候 三思 而后行 后悔药是没有的 时光机也还没研发出来 做过的错事 也无法回复 <!DOCTYPE html> <!-- 文档类型:标准html文档 --> <html lang='en'> <!-- html根标签 翻译文字:英文 --> <head> <!-- 网页头部 --> <m
Mr. 柳上原
2018/09/05
4110
JavaScript高级语法补充(函数参数传递、in delete关键字、比较运算符隐式转换)
1.值类型 (5种):  栈中存储的是数据,赋值时拷贝的也是数据。修改拷贝后的数据对原数据没有影响。
帅的一麻皮
2020/05/18
6830
js中的值类型和引用类型的区别
(1)值类型(基本类型):字符串(string)、数值(number)、布尔值(boolean)、undefined、null (这5种基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值)(ECMAScript 2016新增了一种基本数据类型:symbol es6.ruanyifeng.com/#docs/symbo… )
前端老鸟
2019/10/09
3.6K0
js中的值类型和引用类型的区别
JS基础第一课
> < >= <= == ===(全等,数据类型也要相同) != !==(全不等)
申小兮
2023/04/10
1.3K0
JS基础第一课
引用类型、对象拷贝
1.引用类型有哪些?非引用类型有哪些 引用类型 引用类型(对象、数组、函数、正则): 指的是那些保存在堆内存中的对象,变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,由该位置保存对象。 非引用类型(基本类型) 基本类型值(数值、布尔值、null和undefined): 指的是保存在栈内存中的简单数据段; 2.代码练习 (1)如下代码输出什么?为什么 var obj1 = {a:1, b:2}; var obj2 = {a:1, b:2}; console.log(obj1 == ob
小胖
2018/06/27
7550
深入理解面向对象中的原始类型和引用类型
我们先前学过的数据类型可以划分成两类:原始类型和引用类型。原始类型的数据都是一些比较简单数据,比如字符串,数字等。引用类型的数据稍微复杂一点,比如对象。
小周sir
2019/09/23
1.4K0
深入理解面向对象中的原始类型和引用类型
JavaScript基本语法(一)
1.什么是变量 2.为什么要使用变量 3.变量如何使用 4.原理图 5.变量命名规则和规范 6.变量的交换
靠谱先生
2018/09/10
5710
JavaScript基本语法(一)
二、ES6新语法
图中可对比看出,如果用var声明,在循环外部还是可以使用i变量;但用let声明变量,循环外部不可以使用n变量
Dreamy.TZK
2020/07/03
3860
ECMA
ECMAScript语法参考链接:https://www.w3school.com.cn/js/pro_js_syntax.asp
诺谦
2021/03/15
1.4K0
JS对象
JavaScript中: js中的对象就是生活中对象的一个抽象, 没有特征和行为,取而代之的是有对应的属性和方法;
羊羽shine
2019/06/11
11.6K0
面试官想要的 JS 基本类型
面试的时候我们经常会被问答js的数据类型。大部分情况我们会这样回答包括: 基本类型(值类型或者原始类型): Number、Boolean、String、NULL、Undefined以及ES6的Symb
grain先森
2019/04/17
5790
面试官想要的 JS 基本类型
Web前端学习 第3章 JavaScript基础教程2 变量与数据
如代码所示,我们可以通过var声明一个变量,var后面的英文字母就是变量名,变量名是自定义的,在一定的规则下我们可以随意命名(下一部分我们来讲命名规则)。
学习猿地
2020/06/16
3470
Web前端学习 第3章 JavaScript基础教程2 变量与数据
【一Go到底】第四天---数据类型
浮点类型就是用于存放小数的类型,例如 3.141516 | 2.22 | 1.1234
指剑
2022/10/07
4210
【一Go到底】第四天---数据类型
IT课程 JavaScript基础 039_类型转换
类型转换是将一个数据类型转换为另一个数据类型的过程。类型转换可以是隐式的(由JavaScript引擎自动完成)或显式的(通过编码进行手动转换)。
zhaoJian.Net
2024/09/24
990
原生JS | 数据类型检测,并没你想象的那么简单
HTML5学堂-码匠:看上去,JavaScript中的数据类型检测,并没有什么难度,但是……它包含了不少的知识,如果你只知道一个typeof的话,那很建议你读读这篇文章,加强一下~ 最近一个关系很不错的朋友在跳槽,面试一家大型知名互联网公司的时候,面试官问了一个看上去“超级”基础的问题:如何进行数据类型的检测啊? 面试官:能告诉我如何进行数据类型的检测吗? 码匠好友:typeof啊~ 面试官:还有吗? 码匠好友:instanceof 面试官:还有别的吗?你了解几种? 码匠好友:jQuery的isArray、
HTML5学堂
2018/03/13
9920
【OpenHarmony】TypeScript 语法 ② ( 基础数据类型 | 布尔类型 | 数字类型 | 字符串类型 | 数组类型 | 元组类型 | 枚举类型 | 未知类型 | 联合类型 )
TypeScript 是 JavaScript 的超集 , TypeScript 的基础数据类型 与 JavaScript 的基础数据类型 基本相同 , 下面开始介绍 TypeScript 中的基础数据类型 ;
韩曙亮
2024/06/02
3390
【OpenHarmony】TypeScript 语法 ② ( 基础数据类型 | 布尔类型 | 数字类型 | 字符串类型 | 数组类型 | 元组类型 | 枚举类型 | 未知类型 | 联合类型 )
推荐阅读
相关推荐
面试题:深拷贝和浅拷贝(超级详细,有内存图)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文