回到课程

我能为字符串添加一个属性吗?

重要程度: 5

思考下面的代码:

let str = "Hello";

str.test = 5;

alert(str.test);

你怎么想的呢,它会工作吗?会得到什么样的结果?

试试运行一下:

let str = "Hello";

str.test = 5; // (*)

alert(str.test);

根据你是否开启了严格模式 use strict,会得到如下结果:

  1. undefined(非严格模式)
  2. 报错(严格模式)。

为什么?让我们看看在 (*) 那一行到底发生了什么:

  1. 当访问 str 的属性时,一个“对象包装器”被创建了。
  2. 在严格模式下,向其写入内容会报错。
  3. 否则,将继续执行带有属性的操作,该对象将获得 test 属性,但是此后,“对象包装器”将消失,因此在最后一行,str 并没有该属性的踪迹。

这个例子清楚地表明,原始类型不是对象。

它们不能存储额外的数据。