Javascript字符串类似对象的行为

时间:2019-02-07 00:43:15

标签: javascript google-chrome

Adding new value to string

当我在Chrome开发者控制台中运行上述代码时,没有收到任何错误。但是,当通过加载在网页上的js运行相同的代码时,我会收到此异常-  Cannot create property 'name' on string 'some string'

有人可以告诉我为什么在上述两种情况下会有不同的行为吗?

3 个答案:

答案 0 :(得分:3)

您的网页必须在严格模式下运行该代码段,在这种模式下,分配给字符串的属性将引发错误:

'use strict';
const str = 'foo';
str.bar = 'bar';

在草率模式下,它只会无声地失败:

const str = 'foo';
str.bar = 'bar';

答案 1 :(得分:0)

字符串是一个值对象,因为它们具有的值不是对对象实例的引用,它们不能像引用对象那样具有用[[name]]设置的属性。

a [3]是字符串中的第四个字符,a [0]是第一个字符。

答案 2 :(得分:0)

让我们看看这个案例

const a = "a"
Object.isFrozen(a) // true
const b = new String("b")
Object.isFrozen(b) // false

从本节中,我们可以看到String对象不一定是冻结的。仅冻结那些字符串文字(我认为是因为它们在池中共享。如果不冻结它们,则可以在一个位置上创建属性以影响其他地方的代码)但是,显式构造的String对象是独立的从游泳池出来,因此没有冻结。