我一直在环顾四周,发现JavaScript并没有真正的字符串比较方法来测试相等性。我已经看到接受的方法是使用===运算符。作为一个先学习Java或C ++等经典语言的人,这让我感到害怕,因为对我而言,它会以我实际上不想表现的方式表现出来。
所以我决定编写自己的方法来比较字符串的相等性,但它让我想知道要扩充哪个原型,以便所有字符串都可以访问这个方法。这引出了我的问题;什么是字符串的原型,它继承了什么?
答案 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()
。
总结一下: