我回答这个问题,因为有误传的主题很多:
是这样一个字符串或一个对象?
没有"cat"
是原始字符串值:
typeof "cat"; // "string", a String value
"cat" instanceof String; // false
typeof new String("cat"); // "object", a String object
new String("cat") instanceof String; // true
稍后我会谈论类型和原始值。
它是继承String还是String.prototype的所有属性/方法?
那么,当您使用property accessor operator(圆点或括号符号),原始值被隐式转换为对象,在内部,因此,所有的上String.prototype
的方法是可用的,例如:
当您可以访问:
"cat".chatAt(0);
场景"cat"
转换为对象后面:
Object("cat").chatAt(0);
这就是为什么你有权访问所有值的继承属性。
为什么会出现String和String.prototype?
String
是一个构造函数,允许你创建String对象或做类型转换:
var stringObj = new String("foo"); // String object
// Type conversion
var myObj = { toString: function() { return "foo!"; } };
alert(String(myObj)); // "foo!"
的String.prototype
对象,就是String对象实例继承的对象。
我知道这很让人困惑,我们有String值和String对象,但是大多数时候你只用字符串值工作,现在不用担心String对象。
我应该调用String的String对象和String.prototype的String原型吗?
您应该致电String
"The String
constructor"。
“String prototype”没问题。
你应该知道“一切都是不是一个对象”。
讲起类型,有五个language types规定:
A primitive value是“直接在语言实现的最低级别表示的数据”,这是您可以获得的最简单的信息。
先前描述的类型的值可以是:
- 空:该值
null
。
- 未定义:值
undefined
。
- 数字:所有数字,如
0
,3.1416
,1000
等。还有NaN
和Infinity
。
- 布尔值:值
true
和false
。
- 字符串:每个字符串,如
"cat"
和"bar"
。
来源
2010-11-10 08:46:42
CMS
我同意你与“字符串”和新的String()的区别,我承认我不知道这一点。但我不同意数据和对象的部分。也许字符串,布尔值和数字不是对象,但它们被表示为JS中的对象,并且如果您执行类似于String instanceof Object的操作,则结果为true。 – mck89 2010-11-10 09:03:18
@ mck89,我的意思是一个原始值是最简单的数据片段,是的,你可以“将它们当作对象”(例如,访问继承的属性,''foo“.chatAt'或'5 .. toFixed'),但它们仍然只是那个值,而不是对象。关于'String instanceof Object'很明显,因为'String'是一个Function对象*,它继承自'Function.prototype',它继承自'Object.prototype',因此'String instanceof Function'也会给你'true '。 – CMS 2010-11-10 09:18:13