代码之家  ›  专栏  ›  技术社区  ›  Jimmy

在javascript中,我可以重写括号来访问字符串中的字符吗?

  •  14
  • Jimmy  · 技术社区  · 17 年前

    我能给你下个定义吗 String[int] 避免使用 String.CharAt(int) ?

    4 回复  |  直到 8 年前
        1
  •  12
  •   community wiki 12 revs, 2 users 81% keparo    8 年前

    不,没有办法做到这一点。

    这是来自开发人员的一个常见问题,他们从另一种语言访问javascript,其中 可以定义或重写运算符 对于某种类型。

    在C++中,过载不是完全不可能的。 operator* MyType ,结尾是一个唯一的星号运算符,用于涉及类型为的对象的操作 MyType . 这种做法的可读性可能仍然受到质疑,但语言提供了它。

    在JavaScript中,这是完全不可能的。您将无法定义一个方法,该方法允许您从 String 使用括号。

    @李科沃科夫斯基 提出了一个很好的观点,即在某种程度上, 可能的 使用方括号访问字符,因为方括号可用于访问javascript的成员 Array . 这将涉及创建一个新的 数组 ,使用字符串中的每个字符作为其成员,然后访问 数组 .

    这可能是一个令人困惑的方法。一些JavaScript实现将通过括号提供对字符串的访问,而有些则不提供,因此这不是标准实践。对象可能会被混淆为一个字符串,而且由于JavaScript是一种松散类型的语言,因此存在歪曲类型的风险。仅仅为了使用与现有语言不同的语法而定义一个数组只是为了促进这种混乱。这就产生了 @ Andrew Hedges 问题是:“为什么要和语言斗争?”…

    javascript中的有用模式 对于 合法函数重载 多态性遗传 . 这也不是一个例子。

    撇开所有的语义不谈,操作符仍然没有被重写。

    边注: 习惯于强类型检查和经典继承惯例的开发人员有时会被JavaScript的C系列语法混淆。在引擎盖下,它以一种陌生的方式工作。最好以干净和明确的方式编写JavaScript,以避免混淆。

        2
  •  10
  •   Lee Kowalkowski    17 年前

    请注意: 在任何人面前 其他的 想投票否决我的答案,我回答的问题是:

    IE javascript字符串索引器

    是否有某种方法可以定义字符串[int]以避免使用string.charat(int)?

    关于特别重写括号、语法或最佳实践,这个问题只是问了“某种方式”。(唯一的另一个答案是“不,没有”。)


    实际上,有一种:

    var newArray = oldString.split(''); 
    

    …现在您可以使用括号表示法访问newarray,因为您刚刚将其转换为数组。

        3
  •  3
  •   keparo bshirley    17 年前

    使用 String.charAt()

    它是 标准 适用于所有浏览器 .

    在非IE浏览器中,可以使用括号来访问如下字符:

    "TEST"[1]; // = E
    

    您可以将字符串转换为一个字符数组,这样做:

    var myString = "TEST";
    var charArray = myString.split(''); // charArray[1] == E
    

    这是不鼓励的。没有任何理由不使用charat()方法,而且做其他事情也没有好处。

        4
  •  0
  •   Thevs    17 年前

    这不是答案,只是一个技巧(强烈反对!)特别是,它显示了在JavaScript中,您可以做任何您想做的事情。这只是你幻想的问题。

    您可以使用这样一个事实:您可以像对所有其他对象一样为字符串对象设置任何其他属性,这样您就可以创建string.0、string.1、…。性能:

    String.prototype.toChars = function()  {
        for (var i=0; i<this.length; i++) {
            this[i+""] = this.charAt(i);
        }
    };
    

    现在,您可以使用以下方式访问单个字符:

    var str = "Hello World";
    str.toChars();
    var i = 1+"";
    var c = str[i]; // "e"
    

    请注意,它只对访问有用。它应该是以这种方式分配字符串字符的另一种方法。

    还请注意,每次修改sting时都必须调用.tochars()方法。