我一直在摆弄ECMA-262标准(ECMAScript语言规范,第三版,如果对此很重要的话--我没有发现第三版和第五版在字符串类型/字符串对象上有任何区别)。
有一件事让我感到困惑: String类型和String对象之间的区别。是的,我知道不同之处在于String Type是一个16位UTF-16单元序列,而String对象是一个内置对象,其内部Class属性设置为" String“,其内部Value属性设置为String Type的值。
但是从规范中可以看出,string类型似乎并不公开任何方法;也就是说,它只是一个没有任何附加属性的值。看看这段代码,一切都和预期的完全一样:
document.writeln(typeof "foo"); // 'string'
document.writeln(typeof new String("foo")); // 'object'
第一个类型是实际的String type,第二个是Object Type (它是String类的对象,但它的数据类型是object)。然而,看看这个:
"foo".charAt(0);
fooStrObj = new String("Foo");
fooStrObj.charAt(0);
它们似乎都公开了相同的函数,但是在ECMA-262标准中定义的String类型上没有函数;它公开的所有函数都来自String.prototype对象(我看不到String类型神奇地公开了ECMA-262标准中String.prototype对象的所有属性和函数)。那么,是否将String type类型的值自动提升为String对象,并将原始String Type值作为其内部value属性?
如果它们被完全相同地对待(在所有的意图和目的中,它们似乎是相同的),为什么要有两种不同的方式来表示一个字符串
https://stackoverflow.com/questions/2051833
复制相似问题