js数据类型面试题

来一道关于 JavaScript 数据类型的题目。

var str1 = 'xiaoming';
console.log(str1);
console.log(typeof(str1));
console.log('--------------');
var str2 = new String('xiaoming');
console.log(str2);
console.log(typeof(str2));

结果参加下图:

js数据类型面试题

虽然str1和str2都是以string的形式存入的数据,但是数据类型并不都是string。

str1这个,我们是通过变量直接量的形式给str1赋值,开辟的是一个「栈」空间,所以它返回的数据类型是 string。

str2 这个,我们是new 一个 String 构造函数实例化出来一个对象(str2),开辟的是一块「堆」空间。

所以 typeof(str2) 返回 object 也就理所当然了。

我们注意一下 var str2 = new String(‘xiaoming’); 这行代码。

它在写入’xiaoming’这个数据的时候,它是以key-value的形式通过索引将字符串拆分开,将每一个字母都对应到索引上。

参见上面那个图,str2的key都是1、2、3…这些索引。