new String("A") : 创建一个 String 类型的对象, 值为 "A"
String("A”) : 通过内置函数创建字符串
请说说new String("A")和String("A")分别返回的结果,请解释为什么?
new String("A") :
返回类型:引用类型,堆内存存储
返回值:字符串对象
String("A”) :
返回类型:基本类型,栈内存存储
返回值:字符串值
new string(‘A’)创建的是一个包装对象,其创建的是一个名称为A的object,可以对其添加属性。其真正值存放在堆中,栈中存储的是其指向堆的指针。
string('A')和直接定义‘A’没区别,其创建的是一个基本数据类型的值,其的值存放在栈中。
new String('A'):创建的是一个字符串对象,是引用类型,
String('A'):通过内置函数创建的一个基础类型的字符串,
根本就是引用类型和基础类型的区别:
引用类型的值是存储在堆里面的,但是在栈存储了指向堆的指针。
基础类型的值就是存储在栈中。
前者创建一个字符串对象
后者创建的是基本字符串,是基本类型的值
字符串字面量和String调用返回的字符串,都属于基本字符串
只有将基本字符串转为字符串对象后,才能使用字符串对象的方法
当基本字符串需要调用字符串对象才有的方法,或者查询值时,js会自动将基本字符串转成字符串对象,并调用相应的方法或执行查询
new String('A'):构造函数,通过new字符创建一个String类型的对象实例。引用类型,且在离开其作用域或者主动销毁的时候会销毁。
String('A'):内置方法。其结果和字面量创建一个字符串一样: let str = 'A';属于基本类型,但是为什么可以使用字符串对象才有的方法和属性呢? 这就和JS内部程序有关。当内部程序检测到一个基本类型的字符串在使用方法或者属性的时候。JS会自动创建一个原始包装类型的对象((String,Boolean,Number)),然后暴露出对象的方法和属性。这个原始包装类型对象的生命周期,仅限于存在访问它的那行代码执行期间。
✂【回答】
返回结果:
new String("A")
打印为 String
对象,是复杂数据类型(引用类型)。String("A")
打印为 A
,是简单数据类型(基础类型)。原因:
new String('A')
通过 new
字符,调用了 String
构造函数,创建一个对象实例。String
方法(没有通过 new
生成字符串对象实例)的字符串都是基本字符串。String("A")
生成的字符串是基本字符串。🖊【便签】
简单数据类型(基础类型):
number, string, boolean, undefined, null
复杂数据类型(引用类型):
Array, function, Object
简单数据类型存储在栈内存,赋值的时候是将值复制一份给别人——值传递。
复杂数据类型存储在堆内存,将堆内存的地址存储在栈内存。赋值的时候是将自己的地址复制一份给别人——址传递(引用传递)。
当基本字符串需要调用一个字符串对象才有的方法或者查询值的时候(基本字符串是没有这些方法的),JS 会自动将基本字符串转化为字符串对象并且调用相应的方法或者执行查询。
1.new 构造函数和直接执行函数的区别
2.直接执行函数,会根据函数最后的return,返回相应的值
3.new 一个构造函数,如果return的是一个基本数据类型,那么new 构造函数会返回一个对象
学习不打烊,充电加油只为遇到更好的自己,365天无节假日,每天早上5点纯手工发布前端知识点(死磕自己,愉悦大家)。希望大家在这浮夸的前端圈里,保持冷静,坚持每天花20分钟来学习与思考。在这千变万化,类库层出不穷的前端,建议大家不要等到找工作时,才狂刷题,提倡每日学习!欢迎大家关注3+1开源项目!希望大家每人去学习与思考!(不要为了谁而来,要为自己而努力!)