let str = 'hello world';
str.toString(); // 'hello world'
/**
 * 不知道大家有没有疑惑,变量 str 明明是一个原始值,原始值不是对象,为什么还可以调用方法?
 * 那是因为 ECMAScript 为了操作原始值,提供了三种特殊引用类型————包装类型: String、Number、Boolean。
 * 当在访问 str 的 toString 方法时,会在后台执行以下3步:
 *  1.创建一个 String 类型的实例  let str = new String('hello world');
 *  2.调用实例上的特定方法     let newStr = str.toString();
 *  3.销毁实例           str = null;
 * 这种形为可以让原始值拥有对象的行为。但是,这种行为只存在访问它的那行代码执行期间,
 * 也就是 str.toString() 这行代码的执行期间,在之后这种行为会被销毁,
 * 所以说不能给原始值添加属性和方法
 *  str.a = 'aaa';
 *  onsole.log(str.a); // undefined 
 */