在js中 简单类型是值传递 复杂类型是引用传递

  简单类型:String Number Boolean undefined Null

  复杂类型:Object

下面的代码演示这个

    var simpleName = "cindy";
var obj = {
"name":"radish",
"age":24
};
var list = [
obj,
{
"name":"ruby",
"age":22,
"friends":[obj, "cindy"],
sayHello:function () {
alert("hello" + this.friends);
}
}];
//深拷贝 不受影响
console.log(markName(deepCopy(simpleName),"_js"));//cindy_JS
console.log(simpleName);//cindy
//未拷贝 也没变化
//console.log(markName(simpleName,"_js"));
//console.log(simpleName); //深拷贝 不受影响
console.log(markName(deepCopy(obj),"_js"));
console.log(obj);
//未拷贝 对象被改变
//console.log(markName(obj,"_js"));
//console.log(obj); //深拷贝 不受影响
console.log(markName(deepCopy(list), "_js"));
console.log(list);
//未拷贝 对象被改变
//console.log(markName(list,"_js"));
//console.log(list); //给对象的name属性添加_JS后缀
function markName(source, flag) {
var type = typeof source, simpleType = ["string", "number", "boolean"];
if (!source) {
return source;
} else if (-1 != simpleType.indexOf(type)) {
return source + flag;
} else {
for (var i in source) {
source[i] = typeof source[i] === "object" ? markName(source[i], flag) : "name" == i ? source[i] + flag : source[i];
}
return source;
}
}
;
//深拷贝对象
function deepCopy(obj){
var type = typeof obj, simpleType=["string","number","boolean"], rs;
if(obj){
if(-1!=simpleType.indexOf(type)){
rs = obj;
}else{
rs= obj.constructor === Array? []:{};
for(var i in obj){
if(obj.hasOwnProperty(i)){
rs[i] = typeof obj[i]==="object"? deepCopy(obj[i]):obj[i];
}
}
}
}else{
rs = "error";
}
return rs;
}

javascript 值传递的更多相关文章

  1. JavaScript | 值传递、引用传递的区别

    值传递 JavaScript值传递的数据类型:字符串(String).数字(Number).布尔(Boolean).空(Null).未定义(Undefined), 这五种数据类型是按值访问的,因为可以 ...

  2. JavaScript值传递和引用传递

    1、数据类型:boolean,null,undefined,String,Number,指向包含的数据,进行“值传递”: 2.非数据类型:Array,Function,Object,指向了一个内存地址 ...

  3. javascript中值传递与值引用的研究

    今天重新看了一下<javascript高级程序设计>,其中讲到了javascript中的值传递和值引用,所以就自己研读了一下,但是刚开始没有明白函数中的参数只有值传递,有的场景好像参数是以 ...

  4. JavaScript 函数参数传递到底是值传递还是引用传递

    tips:这篇文章是听了四脚猫的js课程后查的,深入的理解可以参看两篇博客: JavaScript数据类型--值类型和引用类型 JavaScript数据操作--原始值和引用值的操作本质 在传统的观念里 ...

  5. JavaScript传递变量:值传递?引用传递?

    今天在看 seajs-2.2.1/src/util-events.js源码,里面有段代码不是很理解: var events = data.events = {} // Bind event seajs ...

  6. 6 JavaScript函数&内置构造&函数提升&函数对象&箭头函数&函数参数&参数的值传递与对象传递

    JavaScript函数:使用关键字function定义,也可以使用内置的JavaScript函数构造器定义 匿名函数: 函数表达式可以存储在变量中,并且该变量也可以作为函数使用. 实际上是匿名函数. ...

  7. JavaScript进阶(三) 值传递和引用传递

    从C语言开始 有时候讲一些细节或是底层的东西,我喜欢用C语言来讲,因为用C更方便来描述内存里面的东西.先举一个例子,swap函数,相信有一些编程经验的人都见识过,声明如下,函数体我就不写了,各位脑补一 ...

  8. JavaScript基础之值传递和引用传递

    js的值传递和引用(地址)传递 首先总述一下:js的5种基本数据类型 number,string,null,undefined,boolean 在赋值传递时是值传递,js的引用数据类型(object, ...

  9. JavaScript中函数参数的值传递和引用传递

    结论: 对于数字.字符串等基本类型变量,是将它们的值传递给了函数参数,函数参数的改变不会影响函数外部的变量. 对于数组和对象等是将对象(数组)的变量的值传递给了函数参数,这个变量保存的指向对象(数组) ...

随机推荐

  1. Atom编辑器之加快React开发的插件汇总

    汇总下比较实用的atom插件[偏react开发的]-- 博主发现这个还是比较全面的! atom-react-autocomplete–项目内,组件名及状态的自动补全  autocomplete-js- ...

  2. 等比缩放之自适应神器——css3的rem

    1.rem简介   rem是CSS3中新增加的一个单位值,他和em单位一样,都是一个相对单位.不同的是em是相对于元素的父元素的font-size进行计算:rem是相对于根元素html的font-si ...

  3. shell-逐行读取文件

    代码: #!/bin/bash echo 方法1 while read line do echo $line; done < testdata echo "" echo 方法 ...

  4. ASP.NET中ListBox控件的使用

    文章来源:http://www.cnblogs.com/fengzheng126/archive/2012/04/10/2441551.html ListBox控件属性介绍: SelectIndex: ...

  5. matlab读xls数据

    [ndata,label,abalone]=xlsread('data.xls') ndata:表示数字属性 label:表示类别属性 abalone:全部数据

  6. MyBatis 异常 集锦

    异常1.使用映射器 (还没有使用Spring) 异常信息摘要: org.apache.ibatis.binding.BindingException: Type interface com.jege. ...

  7. HDU 2177 取(2堆)石子游戏 (威佐夫博弈)

    题目思路:威佐夫博弈: 当当前局面[a,b]为奇异局时直接输出0 否则: 1.若a==b,输出(0 0): 2.将a,b不停减一,看能否得到奇异局,若有则输出: 3.由于 ak=q*k(q为黄金分割数 ...

  8. javaScript 比较数字大小

    当你需要通过js来比较数字大小的时候千万不要这样 a>b,这样有可能会把a,b当作字符串来比较,最好用函数来转换下 例如: function sorterFunc(a,b){ var aNum= ...

  9. ansible尝试

    1.下载软件 http://releases.ansible.com/ansible/ 2.软件安装 [root@Yangjian-VM02-241 ansible-stable-2.0.0.1]# ...

  10. 本地yum库的搭建

    1.建立yum服务器 yum服务器可以使用http或者ftp的方式,我们这里选择使用http的方式进行,需要先进行httpd的安装 # yum install httpd 在本地建立包目录 # mkd ...