包装器对象显式创建

时间:2015-07-24 20:14:34

标签: javascript

我对包装器对象的理解是:如果我们声明一个基本类型并访问一些属性,那么在内部创建包装器对象,一旦操作完成,它就被丢弃,例如,

var str1="Stack"
str1.length=10
str1.length

第三行将给我5,因为第二行操作是在临时对象上完成的,第三行将创建一个新的临时对象。

但是,如果我明确地创建我自己的包装器对象,例如

var str1=new String("Stack")
str1.length=100
str1.length

然后也是为什么我得到5.这里我没有内部临时包装器对象的依赖,它丢弃了opertaion完成。在这里,我有专门的包装器对象,然后为什么它不允许我分配长度值,如果我们不能设置长度,那么为什么Javascript允许我设置长度?任何人都可以详细说明。

1 个答案:

答案 0 :(得分:3)

根据javascript specification string length不变。因此,您的代码“str1.length = value”什么都不做。

通过构造函数创建字符串--- var str1 = new String(“Stack”)---或通过正常创建--- var str1 =“Stack”---创建不同类型的对象。但由于他们的原型相同( proto :String),长度仍然不变。

  

长度

     

此String表示的String值中的元素数   对象

     

初始化String对象后,此属性不变。它   具有{[[Writable]]:false,[[Enumerable]]:false,   [[Configurable]]:false}。

见下面的示例代码:

var str1 = "Stack"
var str2 = new String("Stack")
str1 === str2
false
typeof str1
"string"
typeof str2
"object"
str1
"Stack"
str2
String {0: "S", 1: "t", 2: "a", 3: "c", 4: "k"
, length: 5
, [[PrimitiveValue]]: "Stack"}0: "S"1: "t"2: "a"3: "c"4: "k" length: 5
__proto__: String
[[PrimitiveValue]]: "Stack"