首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >原始值和复杂值

原始值和复杂值

作者头像
jojo
发布于 2022-03-21 12:37:29
发布于 2022-03-21 12:37:29
69400
代码可运行
举报
文章被收录于专栏:jojo的技术小屋jojo的技术小屋
运行总次数:0
代码可运行

作者:汪娇娇

日期:2016.10.12

一、原始值

1、定义:本身很简单,不能由其他值组成的值,例如5、“foo”、true、null和undefined等,因为它们是不可细化的。也就是说,数字是数字,字符是字符,布尔值则是true或false,null和undefined就是null和undefined。

2、存储和复制:复制是真实值复制。

都知道,我们将字符串“foo”存储到myString中后,也同时将它存储到了内存中。myString的值复制给myStringCopy后,因为复制是真实值复制,而不是地址的复制,所以即使再对myString进行改变,myStringCopy的值也不变。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
	<script>
		var myString="foo";//创建原始值字符对象
		var myStringCopy=myString;//复制字符并存储到新变量上
		var myString=null;//操作存储在myString变量中的值
		console.log(myString,myStringCopy);//输出"null foo"
	</script>
</html>

3、比较:值比较。

从逻辑上说,如果将一个包含数值10的变量和另一个包含数值10的变量进行比较,JS认为它们是相等的,因为10与10是相等的(即10===10),原始字符串的比较也是如此。下面的例子顺带比较下复杂值和原始值的区别:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
	<script>
		var num1=10;
		var num2=10;
		console.log(num1===num2);//输出true
		
		var num3=new Number(10);
		var num4=num3;
		console.log(num1===num3);//输出false,因为num3包含一个复杂数字对象,而num1是原始值
		console.log(num3===num4);//输出true,因为复杂对象采用引用比较(即:地址比较),而不是值比较
	</script>
</html>

二、复杂值

1、定义:可以包含一个或多个原始值或复杂值的类型。例如原生对象构造函数Object()、Array()、Function()等,如下创建了一个包含所有原始值的对象和一个包含所有原始值的数组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
	<script>
		var object={
			myString:"string",
			myNumber:10,
			myBoolean:true,
			myNull:null,
			muUndefined:undefined
		};
		var array=['string',10,true,null,undefined];
	</script>
</html>

2、存储和复制:复制是引用地址的复制。

下面创建一个对象,并将它保存到变量myObject中,然后将myObject中的这个值复制到变量copyOfMyObject中,实际上,这不是复制对象,更像是复制对象的地址。所以更新myObject和copyOfMyObject中任何一个变量中的值,两者都会被改变。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
	<script>
		var myObject={};
		var copyOfMyObject=myObject;//没有复制值,而是复制了地址
		myObject.foo="bar";//操作myObject中的值
		console.log(myObject,copyOfMyObject);//输出'Object{foo="bar""} Object{foo="bar"}'
	</script>
</html>

3、比较:引用比较(即:地址比较)。

指向内存中复杂对象的变量,只有在引用相同“地址”的情况下才是相等的,相反,两个单独创建的对象,即使具有相同的类型并拥有完全相同的属性,它们也是不相等的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
	<script>
		var o1={same:'same'};
		var o2={same:'same'};
		console.log(o1===o2);//输出false,JS并不关注它们的类型是否相同
		
		var o3={foo:"bar"};
		var o4=o3;
		console.log(o3===o4);//输出true,因为它们引用的是同一个对象
	</script>
</html>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/10/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JS基础第一课
> < >= <= == ===(全等,数据类型也要相同) != !==(全不等)
申小兮
2023/04/10
1.4K0
JS基础第一课
ES6 | 前端必备技能:变量的数据解构赋值
本文参考地址:变量的解构赋值 - ECMAScript 6入门 (ruanyifeng.com)
倾盖
2022/08/16
2220
【JavaScript】JavaScript 变量 ④ ( 变量数据类型 | JavaScript 数据类型 | 简单数据类型 | 复杂数据类型 | 数字类型 Number | 数字类型取值范围 )
变量的作用是 存储 数据 的 , 是 一块内存空间的别名 , 每个 变量 都有自己的 变量名 和 数据类型 ;
韩曙亮
2024/03/12
4060
【JavaScript】JavaScript 变量 ④ ( 变量数据类型 | JavaScript 数据类型 | 简单数据类型 | 复杂数据类型 | 数字类型 Number | 数字类型取值范围 )
你根本不懂Javascript(EP4 this关键字和对象原型)
同时注意如果给this传进原始类型的数据时,对应数据会进行装包(boxing),即转换成对应 Obj (new String(……), new Boolean(……), or new Number(……), respectively)
szhshp
2022/09/21
3170
二、ES6新语法
图中可对比看出,如果用var声明,在循环外部还是可以使用i变量;但用let声明变量,循环外部不可以使用n变量
Dreamy.TZK
2020/07/03
4180
Web前端学习 第3章 JavaScript基础教程2 变量与数据
如代码所示,我们可以通过var声明一个变量,var后面的英文字母就是变量名,变量名是自定义的,在一定的规则下我们可以随意命名(下一部分我们来讲命名规则)。
学习猿地
2020/06/16
3680
Web前端学习 第3章 JavaScript基础教程2 变量与数据
2_注释与变量_javascript_脑图系列
photoshop,es5,es6,html,css,sass,git,webpack,vue,react
舒克
2022/01/04
4080
2_注释与变量_javascript_脑图系列
20道精选的面试题附答案,进来看看能答对多少(二)
以下题目,本人验证无误,查阅了相关资料,得出解析部分并做了相关总结,希望对正准备跳槽或找工作的你有帮助!
前端达人
2021/06/16
5690
javascript你必须知道的面试题
从上面的输出结果可知,typeof bar === "object" 并不能准确判断 bar 就是一个 Object。可以通过 Object.prototype.toString.call(bar) === "[object Object]" 来避免这种弊端:
javascript艺术
2021/05/28
7500
javascript你必须知道的面试题
JavaScript第六节
数组:是有序的元素集合 ,数组用于存放一组有序的数据,比如一个班级所有人的名字,一个班级所有人的成绩。
用户3461357
2019/08/02
4840
第183天:引用类型和值类型
一、内存分配 1、数值型内存分配 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=3333
半指温柔乐
2018/09/11
4460
已阅冴羽大佬文章
https://juejin.cn/post/6958361473953300488
达达前端
2021/05/06
1K0
一篇文章带你了解JavaScript中的函数表达式,递归,闭包,变量,this对象,模块作用域
它的一个重要特点就是:函数声明提升,就是在执行代码前先读取函数声明,可以把函数声明放在调用它的语句后。
达达前端
2020/01/02
7150
熬夜7天,我总结了JavaScript与ES的25个重要知识点!
说起JavaScript,大家都知道是一门脚本语言。那么ES是什么鬼呢?ES全称ECMAScript ,是JavaScript语言的国际标准。
达达前端
2020/09/17
1.9K0
熬夜7天,我总结了JavaScript与ES的25个重要知识点!
JavaScript中的数据类型
在ECMAScript中,变量是松散类型的。所谓松散类型就是指变量可以用来保存任何类型的数据。  // 下面的操作是完全合法的 var message = "helloWorld"; message = 100; 但是在实际开发中,我并不推荐大家这样使用变量。这种操作方法是会让代码变得很不安全。为了规避这样的问题,我在变量命名的时候对变量类型做了标明。 var strMessage = "helloWorld"; // String类型 var nMessage = 100; // Number类型 //
就只是小茗
2018/03/07
2.4K0
JavaScript中的数据类型
JavaScript基本语法(一)
1.什么是变量 2.为什么要使用变量 3.变量如何使用 4.原理图 5.变量命名规则和规范 6.变量的交换
靠谱先生
2018/09/10
6100
JavaScript基本语法(一)
对象的扩展
对象(object)是 JavaScript 最重要的数据结构。ES6 对它进行了重大升级,本章介绍数据结构本身的改变,下一章介绍Object对象的新增方法。
小小杰啊
2022/12/21
1.1K0
JavaScript 数据类型
在计算机中,不同的数据所需占用的存储空间是不同的,为了便于把数据分成所需内存大小不同的数据,充分利用存储空间,于是定义了不同的数据类型。
用户9615083
2023/01/16
9230
《JavaScript高级程序设计(第四版)》学习笔记(二)第3章
最开始采用 var、在 ES6 后更多的采用let、const关键字,它们的不同在后面会写到
小丞同学
2021/08/16
1.2K0
JavaScript 中 10 个需要掌握基础的问题
JavaScript 是一种客户端编程语言。 全球超过90%的网站都在使用它,它是世界上最常用的编程语言之一。 因此,今天我们业讨论 10 个有关 JavaScript 的常见问题。
前端小智@大迁世界
2020/10/23
3K0
推荐阅读
相关推荐
JS基础第一课
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档