js数据类型
在javascript中数据类型分两大类:
基本类型(值类型):number、boolean、String、undefined、null
引用类型:object、Array
区别是什么
没有什么比代码更有说服力了,举个例子:
var a = 1;
var b = a;
b = 0;
var c = [ ];
var d = c;
d[1] = 'a';
b // 0
a // 1
d // [empty, "a"]
c // [empty, "a"]
把基本类型赋值给变量时,变量本身改变不会改变原来的变量,把引用类型赋值给变量时,变量本身改变了原来的变量也会变。这是因为,基本类型在赋值的时候是保存的值,引用类型在赋值的时候是保存的引用。当复制保存着某个对象的变量时,操作的是对象的引用,但在为对象添加属性的时候操作的是实际的对象,可以看一道面试题:
var a = {x : 1};
var b = a;
a.a = a = {x : 2};
console.log(a.a); // undefined
console.log(b.a); // {x : 2}
第一行和第二行执行完之后:
- a 和 b都指向{x:1}这块内存
第三行代码相当于:
a.a = a ;
a = {x: 2};
a.a = a执行之后:
a.a = { x : 1 }
a = { x : 1 , a: { x : 2 } };
b = { x : 1 , a: { x : 2 } };
a = {x: 2};执行之后:
a = { x : 2 };
b = { x : 1 , a: { x : 2 } };
所以不难看出a.a的值和b.a的值,掌握了原理之后一切都变得明了啦!
如何判断对象的类型
- typeof obj
适用于基本类型 - obj instanceof Object
适用于引用类型的弱检查 - Object.prototype.toString.call(obj)
适用于引用类型的强检查
网友评论