关于扩展运算符中i++和++i,以及基本类型和引用类型的综合应用
2016-03-06 17:20
323 查看
首先说一下扩展运算符中的i++和++i
i++和++i在单独使用的时候是一样的。
var i=1;
//i++;
//console.log(i);//2
++i
console.log(i);//2
但是当它参与其他运算是就会发生改变
var i=1;
var b=i++ + i++ + i++;//2+3+4
console.log(i);//4
console.log(b)//9
所以总结一下关于i++和++i,即i++是在加号前面,所以向赋值在加1,而++i是先运算再赋值
下面这个案例会涉及到提前声明hoist和原始类型和引用类型的的原理
在下面的原理中。参数a实际上是在getValue函数中的一个局部变量,所以才会有var a=a之说。根据按值传递的原理,原始变量访问的是一个实际值,即任何方式都没有办法改变一个基本类型的值。所以a并没有改变
var a=5
function getValue(a){
//var a=a;
return a++
}
var x=getValue(a);
console.log(x);//5
console.log(a);//5
在看看引用类型的案例
javascript和其他语言不同,其不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间,我们实际操作的就是对象的引用,所以在这个案例中arr是变化了的
var arr=[1,3,4]
function getValue(arr){
//var arr=arr;
for(var i=0;i<arr.length;i++){
++arr[i]
}
console.log(arr);//[2,4,5]
}
getValue(arr);
console.log(arr);//[2,4,5]
本人可能能力有限,若是有什么不对之处,欢迎指正。
i++和++i在单独使用的时候是一样的。
var i=1;
//i++;
//console.log(i);//2
++i
console.log(i);//2
但是当它参与其他运算是就会发生改变
var i=1;
var b=i++ + i++ + i++;//2+3+4
console.log(i);//4
console.log(b)//9
所以总结一下关于i++和++i,即i++是在加号前面,所以向赋值在加1,而++i是先运算再赋值
下面这个案例会涉及到提前声明hoist和原始类型和引用类型的的原理
在下面的原理中。参数a实际上是在getValue函数中的一个局部变量,所以才会有var a=a之说。根据按值传递的原理,原始变量访问的是一个实际值,即任何方式都没有办法改变一个基本类型的值。所以a并没有改变
var a=5
function getValue(a){
//var a=a;
return a++
}
var x=getValue(a);
console.log(x);//5
console.log(a);//5
在看看引用类型的案例
javascript和其他语言不同,其不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间,我们实际操作的就是对象的引用,所以在这个案例中arr是变化了的
var arr=[1,3,4]
function getValue(arr){
//var arr=arr;
for(var i=0;i<arr.length;i++){
++arr[i]
}
console.log(arr);//[2,4,5]
}
getValue(arr);
console.log(arr);//[2,4,5]
本人可能能力有限,若是有什么不对之处,欢迎指正。
相关文章推荐
- ccet项目学习到的知识以及错误整理(一)
- 第一篇学习笔记
- 阅读计划
- 《linux内核分析》 第二周
- hdoj 1210 Eddy's 洗牌问题
- 用最高效的方式计算2*8
- codevs - 图论 - SPFA
- 第二周——操作系统是如何工作的
- Qt5.3.2_CentOS6.4_基本编程环境__20160306
- 第24讲项目2——油量监控
- iOS学习笔记(13)—— Objective-C类扩展的方法之一——分类(category)
- 构建之法:略读
- jdk环境变量配置
- 配置github环境使用brackets开发网页
- 关于Eigen::MatrixBase< Derived >
- android contentProvider 小例子
- 滑动效果的七种方式
- Android SO逆向2-实例分析
- hive中控制map和reduce数量的简单实现方法
- AXIS最佳实践