神奇的String对象
一、既可以作为基本类型,也可以作为引用类型
两种不同的构造方法返回不同的类型
const str = 'Caden';
console.log(typeof str); // string
const strObj1 = new String(str);
console.log(typeof strObj1); // object
const strObj2 = String(str);
console.log(typeof strObj2); // stringstr、strObj1、strObj2的存储位置,栈 or 堆?
const a = "Bob";
const b = "Bob";
const c = new String("Bob");
const d = new String("Bob");
console.log(a === b); // true
console.log(b === c); // false
console.log(c === d); // false所以结论是?
直接定义的string a & b 是存储在栈中的,所以a === b 为true。而 new String() 是直接 创建两个对象,c & d为两个不同的地址,但都指向堆内存的中同一个对象, 所以c === d 为false,b === c自然也是false了。
创建时机
String a = "a"在编译阶段就会在内存中创建
String a = new String("a");是在运行时才会在堆中创建对象
未曾深入研究,从网路上了解到的。在此先做一个记录
二、String的原型对象prototype,基本类型和引用类型都可以引用
他们的原型对象也是同一个引用
why? Amazing !!!
三、String对象的value值
获取value值必须通过toString()方法。
String 的值是不可变的。String 类定义的方法也不能改变字符串的内容,每一个方法都会 返回一个新的字符串。 eg:
看出来只要对原对象做出操作,引用类型(object)就会变成基础类型(string),但是依然可以调用String对象的原型方法,见上。
四、String对象方法
方法
描述
最后更新于
这有帮助吗?