javascript - js 中关于String对象的创建和销毁,何时创建,何时销毁
天蓬老师
天蓬老师 2017-04-10 14:56:36
0
2
702

最近在看javascript权威指南 ,书上看到以下的代码:
var s = 'test';
s.len = 4;
var t = s.len ;
console.log(t);
这时候 t 报出 undefined ,为何啊?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

reply all(2)
阿神
var s = 'test'; // s是`string`类型,不是`object`
s.len = 4; //既然s不是object,怎么进行属性操作呢?

这里其实就引申出了包装对象的概念,你可以近似理解为这一步等同于下面几步操作

var _tmp_var_s = new String(s); // _tmp_var_s是`object`类型,可通过typeof()验证
_tmp_var_s.len = 4;
delete _tmp_var_s;

var t = s.len ;

同样道理,s不是对象,没有len属性 =>

var _tmp_var_s1 = new String(s);
var t = _tmp_var_s1.len; // 新创建的对象,可是没这个属性的,即undefined
delete _tmp_var_s1;

既然包装对象用完就销毁,没啥实际意义,为啥还要存在?

这是因为原始数据类型string, number等是没有属性的,只有object才有属性
为了为原始数据类型提供属性操作,才引申出包装对象这个概念

比如当我们取string类型变量的length属性也是隐含了这一步操作

var str = 'hello!';
var len = str.length;

等效于

var len = new String(str).length;
Peter_Zhu

找到答案了,var s = 'test'创建的只是一个字符串,而不是对象,所以s.len = 4这时候赋值的对象属性是临时创建对象的属性,创建完就直接销毁了, 到了var t = s.len时候就找不到这个属性了,所以显示是undefined。

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template