![88692d4ec8e8c13fa7c54b5a0cc9284c.png](https://i-blog.csdnimg.cn/blog_migrate/f95368933fca2fa58b95d5bf112cf59a.jpeg)
在JavaScript中一切皆对象,就是将所有的数据都看成是对象。于是,就有了字符串和字符串对象的问题。首先看看创建字符串的两种写法:
var str1='hello itsource.cn';
var str2=new String('hello itsource.cn');
很多人对于这两种创建字符串的方式都感到很迷茫,不知道该写哪一种,也不知道有什么区别。接下来把我研究的结果给大家整理出来。
第一,先看一下共同点
1. 两种方式都能成功创建字符串,也能够拿来使用或输出。
![a7a1c2e6fe155b3e8f7363ca95d10b83.png](https://i-blog.csdnimg.cn/blog_migrate/dcb55243139357545054b3dda61a1a83.jpeg)
![eb55a170315ae52af3fe49e7d1cd1ff3.png](https://i-blog.csdnimg.cn/blog_migrate/ee32a4528bfe7752fff08c595b741b4a.jpeg)
2. 两种方式创建的结果还是相等的。
![e60a7253a5d3b8953904935cd7106290.png](https://i-blog.csdnimg.cn/blog_migrate/1813bbb2d7efafd9a903868688eaa089.jpeg)
3. 两种方式创建的字符串都可以使用属性和方法
![68c35a13f7ea89550ce093713dad7826.png](https://i-blog.csdnimg.cn/blog_migrate/f2090fce0c1738749c3e6558e6179ee3.jpeg)
![c29eec8f667a784bcbdfdd2469327bef.png](https://i-blog.csdnimg.cn/blog_migrate/6464535eae8611072e7a2d73e0d550f7.jpeg)
第二,看一下不同的地方
虽然两种方式都能创建出字符串,值也是相等的,并且都能够使用属性和方法。 但是也有一些不同的地方。
1. 两种字符串的类型不相同
![276e7389f8dfca946df939dc67cc5e59.png](https://i-blog.csdnimg.cn/blog_migrate/2479a4c22b719bf11e425c962719f554.jpeg)
![e3c6675866ece331dedbb3c796622d21.png](https://i-blog.csdnimg.cn/blog_migrate/a0f478d958d22cee50c46a2673cbd9b9.jpeg)
从两个图中可以看出, str1的类型是 string,即普通字符串。 而 str2的类型为object,是一个对象类型。 普通字符串是一个基本类型的数据,存储在内存的栈里面,而对象是一个引用类型的数据,存储在内存堆里面。所以两种方式创建出的字符串数据类型不相同,内存的存储位置也不相同。
之前看到的两个字符串相等使用的是值等于(==),而不是全等于(===),如果是全等于则两个字符串不相等,因为它们的类型不相同。
要理解清楚为什么str2是对象类型,就必须了解JS的new关键词,这里不详细解释啦。
2. 字符串对象可以使用自定义属性和方法
![e3b1afab8ab9966f6016ce7cbbd42b4a.png](https://i-blog.csdnimg.cn/blog_migrate/4aba90fa43be6678bced209e8d6388eb.jpeg)
运行结果:
![2c1f0bffc20b211ab1d9040d5e9542ac.png](https://i-blog.csdnimg.cn/blog_migrate/0fa32cc07a97af3dc01299334736ad15.jpeg)
从结果可以看出,str1是基本类型的字符串,不能自定义属性和方法。 而 str2是一个字符串对象,可以使用自定义的属性和方法。
JS中基本字符串和字符串对象的区别我就给大家写到这里了,只是说明一下主要的区别,以便于大家根据自己的情况使用,内部运行原理就不在这里详细写了。