那么是字符串对象类型还是原始类型?

时间:2015-03-28 18:22:16

标签: javascript

来自JavaScript:David Flanagan的权威指南

  

JavaScript类型可以分为两类:基本类型   和对象类型。 JavaScript的原始类型包括数字,   文本字符串(称为字符串)和布尔值真值(称为   布尔值)。

它声明string是原始类型。但后来有一个示例代码

var s = "hello, world" // Start with some text.
s.charAt(0) // => "h": the first character.
s.charAt(s.length-1) // => "d": the last character.
s.substring(1,4) // => "ell": the 2nd, 3rd and 4th characters.
s.slice(1,4) // => "ell": same thing
s.slice(-3) // => "rld": last 3 characters
s.indexOf("l") // => 2: position of first letter l.
s.lastIndexOf("l") // => 10: position of last letter l.
s.indexOf("l", 3) // => 3: position of first "l" at or after 3

字符串对象类型或原语是什么?原始类型如何有方法?这个对象类型属性不是吗?如果它是两者的某种混合,那么它是原始的还是它的对象?

1 个答案:

答案 0 :(得分:2)

字符串是原始值:

  

4.3.2 primitive value

     

Undefined,Null,Boolean,Number或String

之类的成员

但也有字符串对象,它们是对象而不是基元:

  

4.3.18 String object

     

Object类型的成员,它是标准内置的实例   String构造函数

看起来原始字符串有属性,但没有。

当您使用例如string.charAt(0)时,将创建一个与原始字符串具有相同值的字符串对象。该对象继承自String.prototype。调用此字符串对象的charAt方法,并在string.charAt(0)中返回返回的值。然后删除字符串对象。

当您将属性分配给原始字符串时,会发生类似的情况:该属性被分配给新的字符串对象而不是原始字符。

一些例子:

var primitiveStr = 'foo',
    objectStr = new String('foo');
typeof primitiveStr; // 'string'
typeof objectStr; // 'object'
typeof primitiveStr.charAt; // 'function'
typeof objectStr.charAt; // 'function'
primitiveStr.foo = objectStr.foo = 123;
typeof primitiveStr.foo; // 'undefined'
typeof objectStr.foo; // 'number'