首页 新闻 会员 周边

js困恼我的一个问题?

0
悬赏园豆:200 [已关闭问题] 关闭于 2013-05-02 14:39

我一直有个问题不明,var str1=new String("aaa");var str2="aaa"; String构造函数这三者之间的关系还不是很明了呢,根据面向对象的原理,我发现str1和str2都可以看成String的实例对象(因为通过alert(str2.constructor),显示的是String构造函数,说明str2是通过String函数构造而来的对象),但是str2既然是对象为啥不能通过str2.name="aaa";alert(str2.name);得到name属性呢,而str1可以,恳请高人解惑,万谢,如果有什么理解错误还请指点

繁华中的孤儿的主页 繁华中的孤儿 | 初学一级 | 园豆:195
提问于:2013-05-02 14:32
< >
分享
所有回答(1)
0
1 var str1=new String("aaa");
2 
3 var str2="aaa";
4 
5 typeof str1 //object
6 
7 typeof str2 //string (5中基本类型之一 undefined null Boolean number string )

 

Javascript是一门弱语言 他没有语句块(block) 函数里声明的变量 在函数外也能引用 所以怪异之处 很正常

原因就是基本类型 引用类型的对象生存周期不一样
str1是引用类型,这个有点像面向对象的对象一样。
但是str2是基本类型,他创建的类型的对象,只存在这一行代码执行的瞬间,然后立即销毁。我们不能再运行时为基本类型添加属性和方法。

1 var str2="aaa";
2 str2.name="aaa";
3 alert(str2.name)//undefined

这里访问的str2的name属性不见了是因为第二行创建的对象在第三行访问时已经被销毁了

 

不知楼主明白了不  :)

Hejin.Wong | 园豆:229 (菜鸟二级) | 2013-05-02 16:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册