为何在JavaScript控制台中使用new调用表达式后返回undefined?以创建原始类型包装对象为例
为什么
var john = new String("John");执行后控制台返回undefined? 这其实是JavaScript里语句和表达式的返回值差异导致的,咱们一步步拆解明白:
- 首先得清楚:浏览器控制台会输出你当前执行的代码的返回值。
- 当你执行
var john = new String("John");时,这是一条变量声明语句,而不是一个独立的表达式。在JavaScript的语法规则里,var声明语句本身的返回值就是undefined——不管等号右边的表达式(这里的new String("John"))返回什么,整个var语句的返回值都固定是undefined,所以控制台会输出这个结果。 - 那
new String("John")创建的对象去哪了?它已经被成功赋值给变量john了,只是整个声明语句的返回值不是它而已。当你单独输入john时,这是一个变量引用表达式,控制台会计算这个表达式的结果并输出,也就是那个String {'John'}对象,所以这时候能正常看到它。
举个对比例子验证一下:如果你直接在控制台执行new String("John");(不带var赋值),控制台就会直接输出这个String实例,因为这时候你执行的是一个独立的表达式,它的返回值就是创建的对象本身。
内容的提问来源于stack exchange,提问作者Hua Chi Quan
相关产品推荐
相关产品推荐

