【发布时间】:2010-01-12 19:43:58
【问题描述】:
我一直在搞乱 ECMA-262 标准(ECMAScript 语言规范,第 3 版,如果这很重要的话 - 我没有发现第 3 版和第 5 版之间的字符串有任何区别类型/字符串对象)。
有一件事让我感到困惑:字符串类型和字符串对象之间的区别。是的,我知道 String Type 是 16 位 UTF-16 单元序列和 String Object 是一个内置对象的区别,它的内部Class 属性设置为“String”,其内部 Value 属性设置为 String 类型的值。
但是阅读规范,字符串类型似乎没有暴露任何方法;也就是说,它只是一个没有任何附加属性的值。拿这段代码,一切都和预期的一样:
document.writeln(typeof "foo"); // 'string'
document.writeln(typeof new String("foo")); // 'object'
第一种类型是实际的字符串类型,第二种是对象类型(它是String类的对象,但它的数据类型是对象)。但是,看看这个:
"foo".charAt(0);
fooStrObj = new String("Foo");
fooStrObj.charAt(0);
它们似乎都暴露了相同的函数,但是ECMA-262标准中定义的String Type上没有函数;它公开的所有函数都来自 String.prototype 对象(我看不到 String Type 神奇地公开了 ECMA 中 String.prototype 对象的所有属性和函数的事实- 262 标准)。 String Type 类型的值也会自动提升为 String Object,并将原始 String Type 值作为其内部 Value em> 属性?
如果它们的处理方式完全相同(从所有意图和目的来看,它们似乎都是),为什么有两种不同的方式来表示 String?
【问题讨论】:
-
是的,这是一个很好的问题,我从阅读中学到了一些新东西。 +1
标签: javascript