我能为字符串添加一个属性吗?
重要程度: 5
思考下面的代码:
let str = "Hello";
str.test = 5;
alert(str.test);
你怎么想的呢,它会工作吗?会得到什么样的结果?
试试运行一下:
let str = "Hello";
str.test = 5; // (*)
alert(str.test);
根据你是否开启了严格模式 use strict
,会得到如下结果:
undefined
(非严格模式)- 报错(严格模式)。
为什么?让我们看看在 (*)
那一行到底发生了什么:
- 当访问
str
的属性时,一个“对象包装器”被创建了。 - 在严格模式下,向其写入内容会报错。
- 否则,将继续执行带有属性的操作,该对象将获得
test
属性,但是此后,“对象包装器”将消失,因此在最后一行,str
并没有该属性的踪迹。
这个例子清楚地表明,原始类型不是对象。
它们不能存储额外的数据。