目录
一、其实不仅字符串
二、那么到底为什么?
三、代码案例
四、运行结果
一、其实不仅字符串
var str = 'abc';
typeof str ===> string //他不是对象,可以有方法或者属性
var num = 123; //他不是对象,可以有方法或者属性
typeof num ===> number //他不是对象,可以有方法或者属性
当然还有很有很多...
我们知道,String,Number,在JS中是基本类型
二、那么到底为什么?
引言:基本类型是存储在栈(stack)内存中的,而引用类型,对象(object)是存储在堆中的。但是为什么栈内存的可以也可以有方法和属性呢?
console.log(str.indexOf === String.prototype.indexOf) //true
str 又 不属于String 却拥有 String 的方法?????
因为:这是JS中的设计。
原始资料类型的方法与属性是"借"来的
所以原始资料类型是可以向 new String() 或者 new Number() 借来所有的方法。但是自己本身却没有属性和方法。
三、代码案例
var str1 = '123';
var str2 = new String('123');console.log( typeof str1 ); //string
console.log( typeof str2 ); //objectconsole.log( str1.slice(-1) );
console.log( str2.slice(-1) );console.log(str1.indexOf === String.prototype.indexOf);var num1 = 123;
var num2 = new Number(123);
四、运行结果