JS浅谈原始值与引用值操作
值的操作分为三大类:复制,传递,比较
一:复制
原始值
let a = 10;
let b = a;
注释:2018-7-30 17:33:49
1 原始类型的值都是存放在栈内存当中,所以他们的赋值操作,其实相当于在栈内存开辟新的空间,然后将值的副本赋给新的内存,所以他们互不干扰 引用值
let obj = {
name:'panrui'
};
let obj1 = obj;
1 引用类型的值是存放在堆内存当中,栈内存中变量保存的只是一个堆内存的地址,所以赋值操作,也是开辟一个新的栈内存,然后将地址赋值给新的内存,由于两个变量对应的地址指向同一个地方,所以他们会互相影响
2 tip:如果给变量赋值新值呢
2.1
obj1 = 6
console.log(obj) //{name:'panrui'} 并不会影响
2.2
obj = 6
console.log(obj1) //{name:'panrui'} 并不会影响
重复赋值实际上是覆盖变量对原值的引用,变为另一个值的副本或对其引用。所以不会对原值产生影响
二:传递
原始值
let a = 10;
function f(x){
x= x + x
}
f(a)
console.log(a) // 10
注释:说明传递和赋值其实是一样的,都是传递值的副本,互不影响 引用值
let obj = {
name:'panrui'
};
function a(a){
a.name = 'hello'
}
function(obj)
console.log(obj) // {name:'panrui'} 因为传递的地址指向的同一个引用,所以互相影响 注释:说明不管是基本类型,还是引用类型都是按值传递的,引用类型传递的是地址,基本类型传递的值的副本
function a(a){
a.name = 'hello';
a = new Object();
a.name = 'hah';
console.log(a) //{name:'hah'} 相当于重新赋值,这时候a在栈内存保存的是另外一个值的副本或者新的地址 }
a(obj)
console.log(obj) //{name:'hello'}
三:比较值
原始值
let a = 'hello'
let b = 'hello'
a === b //true
注释:当对原始值进行比较时,进行逐字节的比较来判断它们是否相等。比较的是值本身,而不是值所处的位置,固然比较的结果可能会相等,
但只是说明它们所包含的字节信息是相同的 引用值
let a = new Number(1);
let b = new Number(1);
a === b //false let c = a;
a === c //true 注释:当比较两个引用值时,比较的是两个引用地址,而不是比较它们的原值字节是否相等
JS浅谈原始值与引用值操作的更多相关文章
- Js 中的原始值和引用值
最近遇写 node.js 时到一个问题,把对象当赋值给数组成员时总是出错,比如下面的代码, var Arr = new Array(); var Obj = new Object(); for(var ...
- JS中原始值和引用值分析
JS中变量中两种类型的值:原始值,引用值 原始值是存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置. var x = 1; //1就是一个原始值,变量x中存放的就是原始 ...
- JS中原始值和引用值的储存方式
在ECMAscript中,变量可以存放两种类型的值,即原始值和引用值 原始值指的是代表原始数据类型的值,也叫基本数据类型,包括:Number.Stirng.Boolean.Null.Underfine ...
- javascript原始值和引用值类型及区别
原始值和引用值类型及区别 首先,原始值和引用值类型都是js中的数据类型,为了充分利用存储空间,定义了不同的数据类型,而且js是弱类型,动态语言,数据类型可变. 原始值(简单数据类型) 存储在栈中的简单 ...
- JavaScript数据操作--原始值和引用值的操作本质
我的一句话总结:原始值不管是变量赋值还是函数传递都不会改变原值,引用值不管是变量赋值还是函数传递,如果新变量重新赋值,则不会影响原引用值,如新变量是直接操作,就会影响原引用值. 首先明确,值和类型是两 ...
- ECMAScript 原始值和引用值
原始值和引用值 在ECMAScript中,变量可以存在两种类型的值,即原始值和引用值 原始值 存储
- ES6 学习笔记(三)原始值与引用值
总结: 1.原始值,表示单一的数据,如10,"abc",true等. 1.1. ES的6种原始值: Undefined.Null.Boolean.Number.String.Sym ...
- js—浅谈方法和思路的重要性(首篇求大佬支持)
js-浅谈方法和思路的重要性 学了这么久的js,我从老师的,同学的代码中发现,老师写的代码比我们的要清楚的很多,基本上没有太多累赘啊,能少的没有少啊等等..... 废话不多说,下面我们来看看这个我的一 ...
- JavaScript-原始值和引用值
一.原始值和引用值的概念 在 ECMAScript 中,变量可以存在两种类型的值,即原始值和引用值. 1.1 原始值 (1)原始值指的是 原始类型 的值,也叫 基本类型,例如 Number.Stirn ...
随机推荐
- 修改帝国cms栏目后,如何更新
修改栏目后,要依次做如下更新: 1. 2. 3. 如果只是修改了栏目里的属性,只需要做第三步就行了
- React Native——react-navigation的使用
在 React Native 中,官方已经推荐使用 react-navigation 来实现各个界面的跳转和不同板块的切换. react-navigation 主要包括三个组件: StackNavig ...
- 洛谷P2257 YY的GCD 莫比乌斯反演
原题链接 差不多算自己推出来的第一道题QwQ 题目大意 \(T\)组询问,每次问你\(1\leqslant x\leqslant N\),\(1\leqslant y\leqslant M\)中有多少 ...
- Connection to Oracle failed. [66000][12505] Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor .
我安装了Oracle数据库,默认的数据库用户名是system,密码口令是安装过程中你自己设置的.可以先使用命令框,输入 sqlplus system; 然后再输入密码即可. 然后我的数据库连接工具使用 ...
- Mysql MGR架构误操作引发的问题处理
[背景介绍] 故障方描述:一次用户刷权限的时候不小心把数据库用户表记录删掉了,执行之后发现不对后重建用户,杀掉进程后重新MGR启动报错. [报错信息] 2018-06-13T12:47:41.4055 ...
- Latex "Error: Extra alignment tab has been changed to \cr. "
Latex 编译时出现 Error: Extra alignment tab has been changed to \cr. 是因为\begin{tabular}后面的参数指定为7列,而实际排了8 ...
- [物理学与PDEs]第4章习题4 一维理想反应流体力学方程组的守恒律形式及其 R.H. 条件
写出在忽略粘性与热传导性, 即设 $\mu=\mu'=\kappa=0$ 的情况, 在 Euler 坐标系下具守恒律形式的一维反应流动力学方程组. 由此求出在解的强间断线上应满足的 R.H. 条件 ( ...
- @JsonView的使用,entity中指定向前台返回哪些字段
使用步骤: 1.使用接口来声明多个视图 2.在值对象的get方法上指定视图 3.在Controller方法上指定视图
- volative 与处理器的嗅探技术
在<java并发编程的艺术>这本书中,关于volatile的内存原理本质的描述如下: 有volatile变量修饰共享变量在编译器编译后,后多出一个“lock” 来(lock前缀指令相当于一 ...
- Linux Shell远程执行命令
1.问题描述 经常需要远程到其他节点上执行一些shell命令,如果分别ssh到每台主机上再去执行很麻烦,下边介绍shell命令远程执行的方法. 前提: 远程电脑之间已经配置ssh免密码登陆 2.脚本方 ...