十:原始数据类型的对象包装
一个奇怪的特性:使用对象的概念操作字符串,如:
s = "these are the times that try people's souls."
last_word = s.substring(s.lastIndexOf(" ") + 1, s.length);
s并不是一个对象,而字符串也不是对象,运算符lastIndexOf告诉我们,字符串的数据类型是“string”,而对象的数据类型则是“object”,两者是不同的。
为什么字符串的操作采用对象的概念呢?
每个简单的数据类型都有一个相应的对象类,这个类是为它定义的,javascript不仅仅支持数字、字符串和布尔值这些数据类型,而且支持Number、String和Boollean这些数据类型,这些类是那些原始数据类型的包装。包装对象除了可以具有与原始类型一样的数值之外,还可以定义用来运算数据的属性和方法。
javascript可以很灵活的将一种类型的值转换成另一种类型的,当我们在对象环境中使用字符串时,javascript会为这个字符串值内部创建一个String包装对象,这个String对象代替了简单的字符串值,由于对象具有属性和方法,所以在对象语境中使用简单的值就获得了成功。
注意:被创建的String对象只不过是瞬态存在的,它使得我们可以访问属性或方法,此后就没有用了,系统会销毁它。如:
len = s.length;
在这个例子中,s保存了一个字符串,原始的字符串是不会自行改变的。一个新的String对象被创建了,但是它是瞬态存在的,只是为了使我们可以访问长度属性,之后被销毁了,原始的值s并没有改变,
如果我们想在程序中明确使用String对象,就必须创建一个非瞬态对象,就是不能被系统自动销毁的对象。如:
s = "hello world"; //一个原始的字符串
S = new String("hello world!") //一个新创建的String对象。
创建了对象S后,可以用简单的字符串做什么,就可以用对象S做什么。无论何时,只要有必要,字符串都会被转换成String对象,如果我们在需要简单的字符串值的地方使用String ,String对象会被自动转换成一个字符串,因此,如果我们使用String对象时使用了“+”,那么就会有一个瞬态的简单字符串被创建,以便于可以执行字符串的连接操作。
以上讨论的内容,都适用数字、布尔值和他们想对应的Number对象和Boolean对象,v
一个奇怪的特性:使用对象的概念操作字符串,如:
s = "these are the times that try people's souls."
last_word = s.substring(s.lastIndexOf(" ") + 1, s.length);
s并不是一个对象,而字符串也不是对象,运算符lastIndexOf告诉我们,字符串的数据类型是“string”,而对象的数据类型则是“object”,两者是不同的。
为什么字符串的操作采用对象的概念呢?
每个简单的数据类型都有一个相应的对象类,这个类是为它定义的,javascript不仅仅支持数字、字符串和布尔值这些数据类型,而且支持Number、String和Boollean这些数据类型,这些类是那些原始数据类型的包装。包装对象除了可以具有与原始类型一样的数值之外,还可以定义用来运算数据的属性和方法。
javascript可以很灵活的将一种类型的值转换成另一种类型的,当我们在对象环境中使用字符串时,javascript会为这个字符串值内部创建一个String包装对象,这个String对象代替了简单的字符串值,由于对象具有属性和方法,所以在对象语境中使用简单的值就获得了成功。
注意:被创建的String对象只不过是瞬态存在的,它使得我们可以访问属性或方法,此后就没有用了,系统会销毁它。如:
len = s.length;
在这个例子中,s保存了一个字符串,原始的字符串是不会自行改变的。一个新的String对象被创建了,但是它是瞬态存在的,只是为了使我们可以访问长度属性,之后被销毁了,原始的值s并没有改变,
如果我们想在程序中明确使用String对象,就必须创建一个非瞬态对象,就是不能被系统自动销毁的对象。如:
s = "hello world"; //一个原始的字符串
S = new String("hello world!") //一个新创建的String对象。
创建了对象S后,可以用简单的字符串做什么,就可以用对象S做什么。无论何时,只要有必要,字符串都会被转换成String对象,如果我们在需要简单的字符串值的地方使用String ,String对象会被自动转换成一个字符串,因此,如果我们使用String对象时使用了“+”,那么就会有一个瞬态的简单字符串被创建,以便于可以执行字符串的连接操作。
以上讨论的内容,都适用数字、布尔值和他们想对应的Number对象和Boolean对象,v
浙公网安备 33010602011771号