类似Javascript字符串数组的对象行为
当我在Chrome开发控制台中运行上述代码时,我没有得到任何错误。但是当相同的代码通过加载在网页上的类似Javascript字符串数组的对象行为,javascript,google-chrome,Javascript,Google Chrome,当我在Chrome开发控制台中运行上述代码时,我没有得到任何错误。但是当相同的代码通过加载在网页上的js运行时,我会收到这个异常- 无法在字符串“some string”上创建属性“name” 有人能告诉我为什么在上述两种情况下会有不同的行为吗?字符串是一个值对象,因为它们有一个值而不是对对象实例的引用,它们不能像引用对象那样用[“name”]设置属性 [3]是字符串中的第四个字符,[0]是第一个字符。字符串是一个值对象,因为它们的值不是对对象实例的引用,它们的属性不能像引用对象那样设置为[“n
js
运行时,我会收到这个异常-
无法在字符串“some string”上创建属性“name”
有人能告诉我为什么在上述两种情况下会有不同的行为吗?字符串是一个值对象,因为它们有一个值而不是对对象实例的引用,它们不能像引用对象那样用[“name”]设置属性
[3]是字符串中的第四个字符,[0]是第一个字符。字符串是一个值对象,因为它们的值不是对对象实例的引用,它们的属性不能像引用对象那样设置为[“name”]
[3]是字符串中的第四个字符,[0]是第一个字符。您的网页必须在严格模式下运行该代码段,在这种模式下,指定字符串的属性将引发错误:
“严格使用”;
const str='foo';
str.bar='bar'代码>您的网页必须在严格模式下运行该代码片段,在该模式下,指定字符串的属性将引发错误:
“严格使用”;
const str='foo';
str.bar='bar'代码>让我们看看这个案例
const a = "a"
Object.isFrozen(a) // true
const b = new String("b")
Object.isFrozen(b) // false
从本节中,我们可以看到String
对象不一定是冻结的。只有那些字符串文本被冻结(我认为这是因为它们在池中共享。如果它们没有冻结,您可以在一个地方创建属性以影响其他地方的代码),但是,显式构造的string
对象独立于池,因此没有被冻结。让我们看看这种情况
const a = "a"
Object.isFrozen(a) // true
const b = new String("b")
Object.isFrozen(b) // false
从本节中,我们可以看到String
对象不一定是冻结的。只有那些字符串文本被冻结(我认为这是因为它们在池中共享。如果它们没有冻结,您可以在一个地方创建属性以影响其他地方的代码),但是,显式构造的string
对象独立于池,因此没有冻结。但是如果您使用console.log(str.bar),您将无法定义。将属性添加到值对象是无效的。实际上,它是无效的,它只是不会在sloppy模式下引发错误:在sloppy模式下,它会自动失败
,但如果您使用console.log(str.bar),则会导致未定义。向值对象添加属性是无效的。事实上,它是无效的,它只是在草率模式下不会抛出错误:在草率模式下,它只会无声地失败