Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >原 原始值和复杂值

原 原始值和复杂值

作者头像
jojo
发布于 2018-05-03 07:13:10
发布于 2018-05-03 07:13:10
94900
代码可运行
举报
文章被收录于专栏: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>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【JavaScript】JavaScript 变量 ④ ( 变量数据类型 | JavaScript 数据类型 | 简单数据类型 | 复杂数据类型 | 数字类型 Number | 数字类型取值范围 )
变量的作用是 存储 数据 的 , 是 一块内存空间的别名 , 每个 变量 都有自己的 变量名 和 数据类型 ;
韩曙亮
2024/03/12
2800
【JavaScript】JavaScript 变量 ④ ( 变量数据类型 | JavaScript 数据类型 | 简单数据类型 | 复杂数据类型 | 数字类型 Number | 数字类型取值范围 )
JS基础第一课
> < >= <= == ===(全等,数据类型也要相同) != !==(全不等)
申小兮
2023/04/10
1.3K0
JS基础第一课
第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
4150
cocos2d JS-(JavaScript) 函数类型相互转换(字符串、整形、浮点形、布尔值)
工作忙好些天了,近段时间抽点空分享一下自己学习JS的一点笔记心得做点记录,大神勿喷,谢谢!
全栈程序员站长
2022/07/20
7730
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基本语法(一)
1.什么是变量 2.为什么要使用变量 3.变量如何使用 4.原理图 5.变量命名规则和规范 6.变量的交换
靠谱先生
2018/09/10
5760
JavaScript基本语法(一)
JavaScript 数据类型
在计算机中,不同的数据所需占用的存储空间是不同的,为了便于把数据分成所需内存大小不同的数据,充分利用存储空间,于是定义了不同的数据类型。
用户9615083
2023/01/16
8620
JavaScript之爆肝汇总【万字长文❤值得收藏】[通俗易懂]
运行在客户端浏览器中的。每一个浏览器都有JavaScript的解析引擎 脚本语言:不需要编译,直接就可以被浏览器解析执行了 功能:可以来增强用户和html页面的交互过程,可以来控制html元素,让页面有一些动态的效果,增强用户的体验
全栈程序员站长
2022/06/28
1.8K0
JavaScript之爆肝汇总【万字长文❤值得收藏】[通俗易懂]
2_注释与变量_javascript_脑图系列
photoshop,es5,es6,html,css,sass,git,webpack,vue,react
舒克
2022/01/04
3850
2_注释与变量_javascript_脑图系列
《JavaScript高级程序设计(第四版)》学习笔记(二)第3章
最开始采用 var、在 ES6 后更多的采用let、const关键字,它们的不同在后面会写到
小丞同学
2021/08/16
1.2K0
JS对象
JavaScript中: js中的对象就是生活中对象的一个抽象, 没有特征和行为,取而代之的是有对应的属性和方法;
羊羽shine
2019/06/11
11.9K0
你根本不懂Javascript(EP4 this关键字和对象原型)
同时注意如果给this传进原始类型的数据时,对应数据会进行装包(boxing),即转换成对应 Obj (new String(……), new Boolean(……), or new Number(……), respectively)
szhshp
2022/09/21
2890
JavaScript中的数据类型
在ECMAScript中,变量是松散类型的。所谓松散类型就是指变量可以用来保存任何类型的数据。  // 下面的操作是完全合法的 var message = "helloWorld"; message = 100; 但是在实际开发中,我并不推荐大家这样使用变量。这种操作方法是会让代码变得很不安全。为了规避这样的问题,我在变量命名的时候对变量类型做了标明。 var strMessage = "helloWorld"; // String类型 var nMessage = 100; // Number类型 //
就只是小茗
2018/03/07
2.3K0
JavaScript中的数据类型
ES6 | 前端必备技能:变量的数据解构赋值
本文参考地址:变量的解构赋值 - ECMAScript 6入门 (ruanyifeng.com)
倾盖
2022/08/16
2100
Web前端学习 第3章 JavaScript基础教程2 变量与数据
如代码所示,我们可以通过var声明一个变量,var后面的英文字母就是变量名,变量名是自定义的,在一定的规则下我们可以随意命名(下一部分我们来讲命名规则)。
学习猿地
2020/06/16
3480
Web前端学习 第3章 JavaScript基础教程2 变量与数据
ECMAScript 2020新特性
ECMAScript 2020 是 ECMAScript 语言规范的第11版。自1997年出版第一版以来,ECMAScript 已发展成为世界上使用最广泛的通用编程语言之一。
ConardLi
2020/10/30
7760
ECMAScript 2020新特性
javascript你必须知道的面试题
从上面的输出结果可知,typeof bar === "object" 并不能准确判断 bar 就是一个 Object。可以通过 Object.prototype.toString.call(bar) === "[object Object]" 来避免这种弊端:
javascript艺术
2021/05/28
7060
javascript你必须知道的面试题
《你不知道的js(上卷)》笔记2(this和对象原型)
this关键字是javascript中最复杂的机制之一。它是一个很特别的关键字,被自动定义在 所有函数的作用域中。
陨石坠灭
2020/01/21
7080
JavaScript 中 10 个需要掌握基础的问题
JavaScript 是一种客户端编程语言。 全球超过90%的网站都在使用它,它是世界上最常用的编程语言之一。 因此,今天我们业讨论 10 个有关 JavaScript 的常见问题。
前端小智@大迁世界
2020/10/23
2.8K0
37个JavaScript基本面试问题和解答(建议收藏)
1、使用typeof bar ===“object”来确定bar是否是一个对象时有什么潜在的缺陷?这个陷阱如何避免?
用户1272076
2019/03/26
3.1K0
推荐阅读
相关推荐
【JavaScript】JavaScript 变量 ④ ( 变量数据类型 | JavaScript 数据类型 | 简单数据类型 | 复杂数据类型 | 数字类型 Number | 数字类型取值范围 )
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验