javascript 值传递
在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 值传递的更多相关文章
- JavaScript | 值传递、引用传递的区别
值传递 JavaScript值传递的数据类型:字符串(String).数字(Number).布尔(Boolean).空(Null).未定义(Undefined), 这五种数据类型是按值访问的,因为可以 ...
- JavaScript值传递和引用传递
1、数据类型:boolean,null,undefined,String,Number,指向包含的数据,进行“值传递”: 2.非数据类型:Array,Function,Object,指向了一个内存地址 ...
- javascript中值传递与值引用的研究
今天重新看了一下<javascript高级程序设计>,其中讲到了javascript中的值传递和值引用,所以就自己研读了一下,但是刚开始没有明白函数中的参数只有值传递,有的场景好像参数是以 ...
- JavaScript 函数参数传递到底是值传递还是引用传递
tips:这篇文章是听了四脚猫的js课程后查的,深入的理解可以参看两篇博客: JavaScript数据类型--值类型和引用类型 JavaScript数据操作--原始值和引用值的操作本质 在传统的观念里 ...
- JavaScript传递变量:值传递?引用传递?
今天在看 seajs-2.2.1/src/util-events.js源码,里面有段代码不是很理解: var events = data.events = {} // Bind event seajs ...
- 6 JavaScript函数&内置构造&函数提升&函数对象&箭头函数&函数参数&参数的值传递与对象传递
JavaScript函数:使用关键字function定义,也可以使用内置的JavaScript函数构造器定义 匿名函数: 函数表达式可以存储在变量中,并且该变量也可以作为函数使用. 实际上是匿名函数. ...
- JavaScript进阶(三) 值传递和引用传递
从C语言开始 有时候讲一些细节或是底层的东西,我喜欢用C语言来讲,因为用C更方便来描述内存里面的东西.先举一个例子,swap函数,相信有一些编程经验的人都见识过,声明如下,函数体我就不写了,各位脑补一 ...
- JavaScript基础之值传递和引用传递
js的值传递和引用(地址)传递 首先总述一下:js的5种基本数据类型 number,string,null,undefined,boolean 在赋值传递时是值传递,js的引用数据类型(object, ...
- JavaScript中函数参数的值传递和引用传递
结论: 对于数字.字符串等基本类型变量,是将它们的值传递给了函数参数,函数参数的改变不会影响函数外部的变量. 对于数组和对象等是将对象(数组)的变量的值传递给了函数参数,这个变量保存的指向对象(数组) ...
随机推荐
- linux/windows平台生成随机数的不同方法
linux平台,使用rand.Seed() //rand_linux.go package main import ( "math/rand" "time" ) ...
- PyQt界面编程应用与实践
一个典型的GUI应用程序可以抽象为:主界面(菜单栏.工具栏.状态栏.内容区域),二级界面(模态.非模态),信息提示(Tooltip),程序图标等组成.本篇根据作者使用PyQt5编写的一个工具,介绍如何 ...
- iOS10 CAAnimationDelegate的适配
最近在xcode8打开之前的动画代码,看到如下警告
- ES 6 : Math对象的扩展
ES6在Math对象上新增了17个与数学相关的方法.所有这些方法都是静态方法,只能在Math对象上调用. 1.Math.trunc() Math.trunc方法用于去除一个数的小数部分,返回整数部分. ...
- asp.net时间范围查询
1.首先要查询类表中的一个时间段,要明确我的数据库中只有一个时间字段,我们先将他拆分一下. if ($("#news_OpenTime").val() != "" ...
- hdu 2188 选拔志愿者(sg博弈)
Problem Description 对于四川同胞遭受的灾难,全国人民纷纷伸出援助之手,几乎每个省市都派出了大量的救援人员,这其中包括抢险救灾的武警部队,治疗和防疫的医护人员,以及进行心理疏导的心理 ...
- sql优化--in和exists效率
系统要求进行SQL优化,对效率比较低的SQL进行优化,使其运行效率更高,其中要求对SQL中的部分in/not in修改为exists/not exists 修改方法如下: in的SQL语句 SELEC ...
- POJ 3253 Fence Repair (优先队列)
POJ 3253 Fence Repair (优先队列) Farmer John wants to repair a small length of the fence around the past ...
- php笔记(五)PHP类和对象之对象的高级特性
对象比较,当同一个类的两个实例的所有属性都相等时,可以使用比较运算符==进行判断,当需要判断两个变量是否为同一个对象的引用时,可以使用全等运算符===进行判断. class Car { } $a = ...
- 关于去除input type='file'改变组件的默认样式换成自己需要的样式的解决方案
在工作中时常会遇到如需要上传功能的按钮,而不像需要系统默认的样式时候,可以采取以下的解决方案: <img onclick="getElementById('file').click() ...