JS 数据基本类型和引用类型的区别,检测及对象的拷贝
一,数据的基础类型主要有:number,string,boolean,null,undefined,symbol(es6);
引用类型有:object,function,array,regexp,date(除了基本类型外的都可称之为对象);
二,基本类型和引用类型的区别:
1,申明变量时内存分配不同
基本类型存在栈中,占据空间是固定的,占用内存较小,便于查找;
引用类型存在于堆中,大小是不固定的
2,访问机制不同
基本类型是可以直接访问的,而引用类型是通过访问地址,再得到值
3,复制时不同
原始类型的值: 修改新变量,不影响原变量
原因: 复制的是值本身
引用类型的对象: 通过新变量修改对象,等效于直接修改原对象。新旧变量都受影响。
原因: 仅复制的是地址值,原对象始终只有一个
新旧变量使用相同的地址值,引用同一个对象
任何一方修改对象,另一方都同时受影响。
4,参数的传递不同
基本类型只是把值传递给参数,之后参数与变量互不影响
引用值对象的值是堆内存地址,因此函数内部参数的修改会体现在外部
三,数据类型的检测
typeof()返回类型
检测基本类型除了null(返回的是object,null在js中叫做空对象指针),可检测function,对象都返回object;
instanceof 返回布尔值,只能检测引用类型 ,原型链上出现构造函数都会返回true
constructor 有继承时不准
通用的Object.prototype.toString.call();
四,对象的拷贝
对象之间的=复制会改变原对象
浅拷贝:var a={};var b=Object.assign({},a); 此方法当对象里面的值不是字符串而是对象时无用;
对一般的json对象时可:JSON.parse(JSON.stringify(boj))对日期和继承的值没用,当值为
undefined、
function、
symbol会在转换过程中被忽略
深拷贝;
var clone = function (obj) {
if(obj === null) return null
if(typeof obj !== 'object') return obj;
if(obj.constructor===Date) return new Date(obj);
if(obj.constructor === RegExp) return new RegExp(obj);
var newObj = new obj.constructor (); //保持继承链
for (var key in obj) {
if (obj.hasOwnProperty(key)) { //不遍历其原型链上的属性
var val = obj[key];
newObj[key] = typeof val === 'object' ? arguments.callee(val) : val; // 使用arguments.callee解除与函数名的耦合
}
}
return newObj;
};
方法二;
[code]function deepCopy(obj) { var result = Array.isArray(obj) ? [] : {}; for (var key in obj) { if (obj.hasOwnProperty(key)) { if (typeof obj[key] === 'object') { result[key] = deepCopy(obj[key]); //递归复制 } else { result[key] = obj[key]; } } } return result; }
- JS-安全检测JavaScript基本数据类型和内置对象的方法
- js基本数据类型和引用数据类型的区别
- js--3.对象-2.基本和引用数据类型
- js的基本数据类型 引用类型 以及常见的内置对象
- js中基本数据类型和引用数据类型的区别,一个初学者特别容易忽略的地方
- js数组和对象相等判断、拷贝详解(结合几个现象讲解引用数据类型的趣事)
- JS基本数据类型和引用数据类型的区别
- JS基本数据类型和引用数据类型的区别
- JS-Learning | 数据类型(基本类型和引用类型的定义与检测)
- 前端JS基础篇(二)JS基本数据类型和引用数据类型及检测数据类型方法
- JAVA中基本数据类型的引用与对象赋值的区别
- 深入解析js中基本数据类型与引用类型,函数参数传递的区别
- 深入解析js中基本数据类型与引用类型,栈和队的区别
- JS基本数据类型和引用类型的参数传递详细分析
- java中基本数据类型和引用数据类型的区别?
- Js 基本数据类型、引用数据类型
- 49 JS-3 function 对象,基本数据类型 对象的定义 匿名函数
- JS 基本数据类型和引用数据类型
- 契约操作不能使用引用对象作为参数,只允许使用基本类型或数据契约
- JS基本类型和引用类型的区别