3. 变量赋值给另一个变量时,会将原始值的副本赋值给新变量,此后这两个变量是完全独立的,只是value相同。
如果存储在栈中,将会影响程序运行的性能,这是因为:`引用值的大小会改变,所以不能把它放在栈中,否则会降低变量查寻的速度。相反,放在变量的栈内存中的值是该对象存储在堆中的地址。`
2.不可直接访问,在访问对象类型数据时,首先得到的是这个对象在堆内存中的引用地址,再拿这个地址去对应的获得这个对象,即按引用访问。
引用类型的存储需要内存的栈区和堆区共同完成,栈区内存保存变量标识符和指向堆内存中该对象的指针,也可以说是该对象在堆内存的地址;
当解释器寻找引用值时,会首先检索其在栈内存中的地址,取得地址后从堆内存中获得实体。
3.将一个拥有对象内存地址的变量赋值给另一个变量时,是将这个地址赋值给了那个变量,并不是变量本身,所以说这两个变量的引用地址都指向了堆内存中的同一个对象,所以其中“一个”改变,“另一个”也会发生改变。
1.typeof(可返回一个表示数据类型的字符串:number、boolean、string、symbol、object、undefined、function),但是不能判断null,array等。
typeof ''; // string 有效
typeof 1; // number 有效
typeof true; //boolean 有效
typeof undefined; //undefined 有效
typeof new Function(); // function 有效
typeof null; //object 无效
typeof [] ; //object 无效
数组和null返回未object,可以使用instanceof进行判断。
2.instanceof(用来检测一个对象在其原型链中是否存在一个构造函数的prototype属性)
{} instanceof Object;//true
null instanceof Object;//false
貌似在对象的检测上要比typeof强,但是instanceof是存在弊端的。
console.log(1 instanceof Number)//false console.log(new Number(1) instanceof Number)//true
对于基本数据类型,字面量方式创建的值与标准的实例方式创建的值在instanceof检测中有区别。
console.log(arr instanceof Array) // true
console.log(arr instanceof Object); // true
function fn(){}
console.log(fn instanceof Function)// true
console.log(fn instanceof Object)// true
还有instanceof不能检测null和undefined
对于null和undefined,对于的数据类型应该是null和undefined,但是。。。
3.Object.prototype.toString.call()准确判断数据类型方法,获取对象原型上的toString方法,执行方法,让toString方法中的this指向第一个参数的值。
Objec中的toString的作用是返回当前方法执行的this,其中第一个object代表当前实例对象数据类型,第二个代表this所属的类型。
Object.prototype.toString.call('') ; // [object String]
Object.prototype.toString.call(1) ; // [object Number]
Object.prototype.toString.call(true) ; // [object Boolean]
Object.prototype.toString.call(undefined) ; // [object Undefined]
Object.prototype.toString.call(null) ; // [object Null]
Object.prototype.toString.call(new Function()) ; // [object Function]
Object.prototype.toString.call(new Date()) ; // [object Date]
Object.prototype.toString.call([]) ; // [object Array]
Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
Object.prototype.toString.call(new Error()) ; // [object Error]
Object.prototype.toString.call(document) ; // [object HTMLDocument]
Object.prototype.toString.call(window) ; //[object global] window是全局对象global的引用