从面试题中夯实基础
问题1: js的基本类型有哪些?引用类型有哪些?引用类型和基本类型有什么区别?
答:js基本类型:String、Number、Boolean、Null、Undefined。
js引用类型:Array、Object、Function。
举个例子来解释引用类型和基本类型的区别
var a = 10;
var b = a;
b = 20; // b = 20 a = 10
上面,b获取值是a值的一份拷贝,虽然,两个变量的值是相等,但是两个变量保存两不同的基本数据类型值。b只是保存了a复制的一个副本。所以,当b的值改变时,a的值依然是10;
过程如下图所示:
再举个引用类型的例子:
var obj1 = new Object(); var obj2 = obj1; obj2.name = "Nick"; console.log(obj1.name); // Nick
声明了一个引用类型obj1,并且赋值给了obj2;此时他们俩指向的是同一个堆内存,也就是说,一旦内存里的值改变了,那么相应引用它的对象也会发生改变,
所以obj1的name字段也变成了‘Nick’。
如下图所示:
问题2: null和undefined的区别?
答:说到这俩的区别,也没啥好说的,因为他们的表现都是一样的,!null和!undefined都是true,甚至null == undefiend 也是true。如非要给他们做个区别,
那就要扯到90年代,JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。Brendan Eich觉得,如果null自动转为0,很不容易发现错误。因此,Brendan Eich又设计了一个undefined。
说的再细致一些就是,null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。