为什么我不能在javascript中为字符串对象添加属性?

为什么我不能在javascript中为字符串对象添加属性?

我继承了另一个开发人员写的一些javascript代码。他不喜欢我们在整个项目中使用的网格组件,因此他决定编写自己的网格组件。他写的网格无法对日期进行排序,因为它只能绑定到字符串/数字。在使用之前,他将所有日期转换为字符串。我查看了他编写的日期函数的字符串格式,并认为我可以只使用原始值为字符串添加日期属性,然后在排序时查看字符串是否具有日期属性并基于此排序。但是,似乎您无法在javascript中向字符串添加属性。我不知道有些类型你不能添加属性。例如:

<html><script>var test = "test";test.test = "test inner";console.log(test);console.log(test.test);</script>

test.test将是未定义的。奇怪的。我的问题是为什么这段代码不起作用?而且,如果你能想到在该网格上排序日期的任何变通方法(除了实际绑定到日期对象而不是字符串,这将很难修复),这将是非常有用的。


撒科打诨
浏览 1400回答 3
3回答

慕容708150

如果使用String对象,则可以添加属性:var test = new String("test");test.test = "test inner";console.log(test.toString()); // prints out "test"console.log(test.test); // prints out "test inner"

偶然的你

“你不能为这些值分配属性”有点误导:由于自动装箱(更具体地说,是ECMA-262第5版第8.7.2节中描述的算法),将属性分配给基元是完全有效的。但是,属性将被添加到纯临时包装器对象而不是基元,因此无法获取属性(包装器对象不替换基元);&nbsp;因此,为一个原语分配一个属性是一个noop,除非赋值有副作用(例如,如果属性是通过访问函数实现的)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript