最近在看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;//新创建的对象,可是没这个属性的,即undefineddelete_tmp_var_s1;既然包装对象用完就销毁,没啥实际意义,为啥还要存在?这是因为原始数据类型string,number等是没有属性的,只有object才有属性为了为原始数据类型提供属性操作,才引申出包装对象这个概念比如当我们取string类型变量的length属性也是隐含了这一步操作varstr='hello!';varlen=str.length;等效于varlen=newString(str).length;
红糖糍粑
TA贡献1815条经验 获得超6个赞
找到答案了,vars='test'创建的只是一个字符串,而不是对象,所以s.len=4这时候赋值的对象属性是临时创建对象的属性,创建完就直接销毁了,到了vart=s.len时候就找不到这个属性了,所以显示是undefined。
添加回答
举报
0/150
提交
取消