gpt4 book ai didi

javascript - 包装器对象显式创建

转载 作者:行者123 更新时间:2023-11-29 10:39:26 24 4
gpt4 key购买 nike

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

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

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

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

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

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

最佳答案

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

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

length

The number of elements in the String value represented by this String object.

Once a String object is initialized, this property is unchanging. It has the attributes { [[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"

关于javascript - 包装器对象显式创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31619030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com