javascript:原始字符串有方法吗?

IT技术 javascript string primitive
2021-01-14 02:58:50

MDN声明:

原始值,原始值

不是对象且没有任何方法的数据。JavaScript 有 5 种原始数据类型:字符串、数字、布尔值、空值、未定义。除了 null 和 undefined 之外,所有原始值都具有环绕原始值的对象等效项,例如 String 对象环绕字符串原始值。所有原语都是不可变的。

那么当我们调用 a "s".replaceor 时"s".anything,它等价于new String("s").replaceandnew String("s").anything吗?

2个回答

不,字符串原语没有方法。与数字原语一样,JavaScript 运行时会将它们提升为成熟的“字符串”对象,当被以下结构调用时:

var space = "hello there".indexOf(" ");

在某些语言中(好吧,特别是 Java,但我认为该术语很常见)据说该语言在适当的时候将其对象包装器中的原语“装箱”。由于标记语法的变幻莫测,数字会稍微复杂一些;你不能只说

var foo = 27.toLocaleString();

因为“。” 不会按照您需要的方式进行解释;然而:

var foo = (27).toLocaleString();

工作正常。对于字符串原语 - 和布尔值,就此而言 - 语法没有歧义,例如:

var foo = true.toString();

将工作。

数字后的第一个点是小数点。所有浏览器都一致认为 12..toLocaleString() 正在对数字进行操作。
2021-04-01 02:58:50
嗯,它似乎至少在 Chrome 中工作......问题是低级“标记语法”将钩住第一个“。” 由于浮点数的外观(“23.223”)。但是那个双点技巧应该有效,因为标记器将在第二个“.”处停止,将它留给解析器来构造属性引用表达式。
2021-04-02 02:58:50
就个人而言,我更喜欢,(27).toLocaleString()因为它很容易忘记一点“。” 卡在那里。但这只是一种风格上的意见,并没有多大value:-)
2021-04-02 02:58:50
嘿顺便说一句是双点语法“标准”?像 27..toLocaleString()
2021-04-06 02:58:50
@kennebec 很有道理,谢谢;在过去的十几年里,我并没有亲自跟踪,但考虑到标记语法等,这当然是有道理的。:-)
2021-04-13 02:58:50

技术上正确的答案是“不”。

现实世界的答案是“不,但无论如何它都会起作用”。那是因为当你做类似的事情时

"s".replace()

解释器知道您想要实际操作字符串,就好像您是用它创建的一样

var str = new String("s")

因此,就好像你已经这样做了一样。