它继承的字符串原型是什么?

时间:2015-01-29 00:05:23

标签: javascript string

我一直在环顾四周,发现JavaScript并没有真正的字符串比较方法来测试相等性。我已经看到接受的方法是使用===运算符。作为一个先学习Java或C ++等经典语言的人,这让我感到害怕,因为对我而言,它会以我实际上不想表现的方式表现出来。

所以我决定编写自己的方法来比较字符串的相等性,但它让我想知道要扩充哪个原型,以便所有字符串都可以访问这个方法。这引出了我的问题;什么是字符串的原型,它继承了什么?

2 个答案:

答案 0 :(得分:1)

我不明白你想如何改进平等比较,但是......

  

让我想知道要扩充哪个原型,以便所有字符串都可以访问此方法。

那将是String.prototype

  

所有String实例都继承自String.prototype。对String原型对象的更改将传播到所有String实例。

答案 1 :(得分:1)

在Javascript中,像数字这样的字符串是原始类型。 (在Java中考虑int,char等。) 你可以通过运行

来判断这是真的
typeof 'my string';//results in 'string'
'my string' instanceof Object;//results in false!

因为字符串是javascript中的原始类型,所以使用==和===运算符是安全的。就像在Java中一样,将整数与==。

进行比较是安全的

与Java类似,基元类型有对象包装类型,无法使用==和===进行比较。 (在Java中思考整数,字符等。) 因此,虽然从技术上讲你可以通过运行new String('my string')来创建一个String对象,但这通常是一个坏主意,因为它可以打破对能够比较字符串的期望。

typeof new String('my string');//results in 'object'
new String('my string') instanceof Object;//results in true
'my string' instanceof String;//results in false

与Java(至少Java 5及更高版本)一样,Javascript具有自动装箱功能。这允许将字符串视为具有属性和功能。正在运行'my string'.toUpperCase()实际上更像是new String('my string').toUpperCase()

总结一下:

  1. 字符串是基本类型,因此您可以使用比较运算符
  2. 要小心创建无法以这种方式进行比较的字符串对象
  3. autoboxing允许我们调用基本类型的函数。