有什么方法可以定义String[int]
以避免使用String.CharAt(int)
?
不,没有办法做到这一点.
这是来自其他语言的JavaScript开发人员的常见问题,其中可以为特定类型定义或覆盖运算符.
在C++中,它不是完全不可能的超载operator*
有关MyType
,与涉及类型的对象操作的独特的星号操作结束了MyType
.这种做法的可读性可能仍会受到质疑,但是语言仍然可以提供.
在JavaScript中,这是不可能的.您将无法定义允许您String
使用括号索引字符的方法.
@Lee Kowalkowski提出了一个很好的观点,即在某种程度上,它可以使用括号访问字符,因为括号可用于访问JavaScript的成员Array
.这将涉及创建一个新的Array
,使用字符串的每个字符作为其成员,然后访问Array
.
这可能是一种令人困惑的方法.JavaScript的某些实现将通过括号提供对字符串的访问,而有些则不会,因此它不是标准做法.该对象可能会混淆一个字符串,并且由于JavaScript是一种松散类型的语言,因此存在歪曲类型的风险.定义一个数组仅仅是为了使用与语言已经提供的语法不同的语法,只是为了促进这种类型的混淆.这引起了@Andrew Hedges的问题:"为什么要对抗这种语言?"
JavaScript中有一些有用的模式用于合法的函数重载和多态继承.这不是一个例子.
除了所有语义之外,运营商仍然没有被覆盖.
旁注:习惯于强类型检查和经典继承惯例的开发人员有时会被JavaScript的C系列语法所困惑.在引擎盖下,它以一种不熟悉的方式工作.最好以干净和明确的方式编写JavaScript,以防止混淆.
请注意:在其他人想要将我的答案投票之前,我回答的问题是:
IE javascript字符串索引器
有没有什么方法可以定义string [int]以避免使用string.CharAt(int)?"
没有关于具体覆盖括号,语法或最佳实践的问题,这个问题只是要求"某种方式".(唯一的另一个答案是"不,没有.")
嗯,实际上,有点:
var newArray = oldString.split('');
...现在您可以使用括号表示法访问newArray,因为您刚刚将其转换为数组.