关于引用类型的值改变(Object)
来源:互联网 发布:java json转换 编辑:程序博客网 时间:2024/05/18 19:21
一、JavaScript值类型和引用类型有哪些
(1)值类型:数值、布尔值、null、undefined。
(2)引用类型:对象、数组、函数。
二、如何理解值类型和引用类型及举例
(1)值类型理解:变量的交换等于在一个新的地方按照连锁店的规范标准(统一店面理解为相同的变量内容)新开一个分店,这样新开的店与其它旧店互不相关、各自运营。
function chainStore()
{
var store1='Nike China';
var store2=store1;
store1='Nike U.S.A.';
alert(store2); //Nike China
}
chainStore();
//把一个值类型(也可以叫基本类型)store2传递给另一个变量(赋值)时,其实是分配了一块新的内存空间,因此改变store1的值对store2没有任何影响,因为它不像引用类型,变量的交换其实是交换了指像同一个内容的地址。
(2)引用类型理解:变量的交换等于把现有一间店的钥匙(变量引用地址)复制一把给了另外一个老板,此时两个老板同时管理一间店,两个老板的行为都有可能对一间店的运营造成影响。
function chainStore()
{
var store1=['Nike China'];
var store2=store1;
alert(store2[0]); //Nike China
store1[0]='Nike U.S.A.';
alert(store2[0]); //Nike U.S.A.
}
chainStore();
//在上面的代码中,store2只进行了一次赋值,理论上它的值已定,但后面通过改写store1的值,发现store2的值也发生了改变,这正是引用类型的特征,也是我们要注意的地方。
三、关于引用类型的坑
let arr1 = [{name: '小猪'}]
let arr2 = [{name: '小狗儿', age: 1}, {name: '大狗儿', age: 2}]
_.forEach(arr1, (item1, index1) => {
_.forEach(arr2, (item2, index2) => {
if (index2 === index1) {
_.forIn(item2, (val, key) => {
if (item1[key]) {
val = item1[key]
console.log(val)
}
})
}
})
})
console.log(arr2)
结果输出:小猪
[{name: '小狗儿', age: 1}, {name: '大狗儿', age: 2}]
val的值改变了,但是没有改变arr2的值,这是因为这只是一个值得改变,item改变不会导致数组的值发生改变
let arr1 = [{name: '小猪'}]
let arr2 = [{name: '小狗儿', age: 1}, {name: '大狗儿', age: 2}]
_.forEach(arr1, (item1, index1) => {
_.forEach(arr2, (item2, index2) => {
if (index2 === index1) {
let obj = arr2[index2] // 把引用类型真正赋值给obj,obj改变arr2[index2]的值发生改变
_.forIn(obj, (val, key) => {
if (item1[key]) {
obj[key] = item1[key]
console.log(obj[key])
}
})
}
})
})
console.log(arr2)
结果输出:小猪
[{name: '小猪', age: 1}, {name: '大狗儿', age: 2}]
引用类型arr2[index2]发生改变,导致arr2发生改变,而arr2[index2]和item2的值是相等的,因为没有引用类型所以arr2不会发生改变
四、再举一个简单的例子
let arr1 = [1, 2, 3, 4]
_.forEach(arr1, (item, index) => {
item = 1
})
console.log(arr1)
输出:[1, 2, 3, 4]
item的值不会引起数组的改变
// 做一下简单的修改
let arr1 = [1, 2, 3, 4]
_.forEach(arr1, (item, index) => {
arr1[index] = 1
})
console.log(arr1)
输出:[1, 1, 1, 1]
阅读全文
0 0
- 关于引用类型的值改变(Object)
- C#利用类型引用改变private类型变量的值
- JavaScript引用类型(Object 类型)
- 引用类型(一) Object类型
- JavaScript的引用类型1(Object Array)
- javascrip引用类型object
- JS引用类型Object
- 引用类型----Object
- 引用类型-Object()
- 第五章:引用类型(Object 类型、Array 类型)
- 关于值类型和引用类型的思考
- 关于值类型和引用类型的区别和总结
- 关于数组的引用类型和值类型
- 关于引用类型和值类型,存储结构的…
- Java除了基本类型,其它都是引用传值,传值是改变变量引用的方向
- javascript 引用类型 - Object类型
- JavaScript引用类型--Object类型
- 关于javascript的引用类型
- jdbc调用存储过程获取多个结果集
- tensorflow在训练模型的时候如何指定GPU进行训练
- Springmvc处理静态资源以及数据绑定(六)
- 正则表达式篇之——电影净化器
- PHP 用phpcharm 获取不到$_POST
- 关于引用类型的值改变(Object)
- bzoj1007
- Idea 使文件不受SVN版本控制
- Python数据分析之利用pandas查询数据
- Dancing link x(DLX)算法 模板讲解
- tensorflow 学习笔记4 搭建神经网络基本流程
- 一个 JDBC 实现对 mysql 进行分页查询的 实例
- 用Thymeleaf在前台下拉列表取值
- git常用命令记录