读书笔记,主要内容来自《JS高级程序设计》
--------
string属于JS中基本数据类型(Undefined,Null,Boolean,Number,String)之一,为了便于操作基本数据类型,ECMAScript提供了对应的String基本包装类型(下面称为String对象)。
一、 string基本类型
1.使用方式-对象字面量
var str1 = “hello world”;
var str2 = ‘hello world’;
2.字符串特点-不可变
字符串一旦创建,其值就不能改变。例如:
var str3 = “hello”;
str3 = str3 +“ world”;
创建一个新的字符串“hello world”,将其赋给str3,并将原来的旧值销毁。
二、 String基本包装类型
基本包装类是为了便于操作基本类型的值。JS中的String类与其他引用类型(Array类,Date类,Function类等)类似,提供了很多便于操作的函数。
1.使用方式-构造函数
var strObj = new String(“hello world”);
2.String对象
String对象有自己的属性和方法,最常用的属性就是String.length,另String.prototype属性允许我们向对象添加属性和方法。
String对象提供了很多方法,用于对字符串的解析和操作,这里主要讲解他们的关系,更多String对象的方法请参考 http://www.w3school.com.cn/jsref/jsref_obj_string.asp
三、 关系
这里暂且称为他们之间的关系。在JavaScript中,我们更多的是使用基本数据类型string,并且这个时候却可以正常的使用一些String类的方法。例如:
原因(来自JS高级程序设计):“每当读取一个基本类型值的数据,后台就会创建一个对应的基本包装类型的对象,从而能够调用一些方法来操作这些数据。”所有的基本字符串值都能访问String类的方法。
上面的过程,在后台就是:
1. 创建String类的一个实例
var s1 = new String(“hello”);
2. 在实例上调用方法
s2 = s1.substring(2);
3. 销毁这个实例
s1 = null;
四、 引用类型与基本包装类型的区别
显式的使用new操作符去创建一个引用类型的实例,与后台自动创建的基本包装类型的对象是有区别的。
1. 后台自动创建
自动创建的基本包装类型的对象,只存在于一行代码的执行瞬间。在执str1.color=”red”时,创建了一个String对象,执行完就被销毁了。在访问color属性的时候,又创建了一个String对象,这个对象是没有color属性的。还是上面 那句:每当读取一个基本类型值的数据,后台就会创建一个对应的基本包装类型的对象。
只要我们没有显示创建一个String对象,它就是一个基本数据类型,能访问一些String对象的方法(因为执行时,后台会有一些操作),需要注意的就是不能在运行的时候给基本类型添加属性和方法。
2. 显式创建对象
显示创建一个基本包装类型的对象,可以访问所有属性和方法,也可以添加属性和方法。
这个时候我们可以访问到添加的属性,因为它本身就是一个String类型的实例。