Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
类似Javascript字符串数组的对象行为_Javascript_Google Chrome - Fatal编程技术网

类似Javascript字符串数组的对象行为

类似Javascript字符串数组的对象行为,javascript,google-chrome,Javascript,Google Chrome,当我在Chrome开发控制台中运行上述代码时,我没有得到任何错误。但是当相同的代码通过加载在网页上的js运行时,我会收到这个异常- 无法在字符串“some string”上创建属性“name” 有人能告诉我为什么在上述两种情况下会有不同的行为吗?字符串是一个值对象,因为它们有一个值而不是对对象实例的引用,它们不能像引用对象那样用[“name”]设置属性 [3]是字符串中的第四个字符,[0]是第一个字符。字符串是一个值对象,因为它们的值不是对对象实例的引用,它们的属性不能像引用对象那样设置为[“n

当我在Chrome开发控制台中运行上述代码时,我没有得到任何错误。但是当相同的代码通过加载在网页上的
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),则会导致未定义。向值对象添加属性是无效的。事实上,它是无效的,它只是在草率模式下不会抛出错误:
在草率模式下,它只会无声地失败