当我在Chrome开发者控制台中运行上述代码时,没有收到任何错误。但是,当通过加载在网页上的js
运行相同的代码时,我会收到此异常-
Cannot create property 'name' on string 'some string'
有人可以告诉我为什么在上述两种情况下会有不同的行为吗?
答案 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
对象是独立的从游泳池出来,因此没有冻结。