javascript 值传递
2024-10-10 06:59:24
在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继承
- Java 第22章 mySQy
- .net程序员转行做手游开发经历(三)
- EF框架step by step(2)—Model-First
- DDD:《实现领域驱动》拾贝(待续)
- MSSQL删除字段时出现 服务器: 消息 5074,级别 16,状态 1,行 1 的解决办法
- Qemu文档
- Mac与Linux的一个巨大不同
- POJ 2559 Largest Rectangle in a Histogram (单调栈或者dp)
- [Ioi2005]River
- 浅谈我对几个Web前端开发框架的比较
- bash启动时加载配置文件过程
- 201521123071 《JAVA程序设计》第十周学习总结
- SQL强化(三) 自定义函数
- Oracle的order by的中文排序问题
- 安装VMware tools
- 不正常退出vim产生swp文件的解决方法
- std::set
- java如何编写下载功能
- hadoop的两大核心之一:HDFS总结