为了账号安全,请及时绑定邮箱和手机立即绑定

js 中关于String对象的创建和销毁,何时创建,何时销毁

js 中关于String对象的创建和销毁,何时创建,何时销毁

胡子哥哥 2019-04-07 11:18:30
最近在看javascript权威指南,书上看到以下的代码:vars='test';s.len=4;vart=s.len;console.log(t);这时候t报出undefined,为何啊?
查看完整描述

2 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

vars='test';//s是`string`类型,不是`object`
s.len=4;//既然s不是object,怎么进行属性操作呢?
这里其实就引申出了包装对象的概念,你可以近似理解为这一步等同于下面几步操作
var_tmp_var_s=newString(s);//_tmp_var_s是`object`类型,可通过typeof()验证
_tmp_var_s.len=4;
delete_tmp_var_s;
vart=s.len;
同样道理,s不是对象,没有len属性=>
var_tmp_var_s1=newString(s);
vart=_tmp_var_s1.len;//新创建的对象,可是没这个属性的,即undefined
delete_tmp_var_s1;
既然包装对象用完就销毁,没啥实际意义,为啥还要存在?
这是因为原始数据类型string,number等是没有属性的,只有object才有属性
为了为原始数据类型提供属性操作,才引申出包装对象这个概念
比如当我们取string类型变量的length属性也是隐含了这一步操作
varstr='hello!';
varlen=str.length;
等效于
varlen=newString(str).length;
                            
查看完整回答
反对 回复 2019-04-07
?
红糖糍粑

TA贡献1815条经验 获得超6个赞

找到答案了,vars='test'创建的只是一个字符串,而不是对象,所以s.len=4这时候赋值的对象属性是临时创建对象的属性,创建完就直接销毁了,到了vart=s.len时候就找不到这个属性了,所以显示是undefined。
                            
查看完整回答
反对 回复 2019-04-07
  • 2 回答
  • 0 关注
  • 580 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信