''.charAt(0)可靠''?

时间:2011-11-23 15:25:20

标签: javascript

我知道有更好的方法来检查我的空绳子。


这通常是检查空字符串。我实际上在做类似的事情:

var s = /*who knows?*/;
switch (s.charAt(0)) {
    // ...
}

并想知道我是否可以避免额外的if (!s)

3 个答案:

答案 0 :(得分:4)

是的,只要该值是有效字符串即可。 language spec的第15.5.4.4节说

  
      
  1. 让位置为ToInteger(pos)。
  2.   
  3. 设大小为S中的字符数。
  4.   
  5. 如果位置< 0或位置≥大小,返回空字符串。
  6.   

自ES3以来没有改变。解释器在字符串函数兼容性方面非常出色。

那就是说,我最近为charAtClosure compiler实现了一个窥孔优化,但我没有优化越界检查,因为编译器倾向于不优化被认为是程序员错误。

答案 1 :(得分:3)

是的,如果索引超过字符串的长度,它将始终返回""

取自MDC's documentation of the charAt() function

  

字符串中的字符从左到右编制索引。第一个字符的索引是0,字符串中名为stringName的最后一个字符的索引是stringName.length - 1. 如果您提供的索引超出范围,JavaScript将返回一个空字符串

答案 2 :(得分:2)

要回答修改过的问题(或者我认为问题是什么):

如果您的变量未定义或类型为string,则.charAt将失败。

执行类似

的操作
if (typeof s == "string") {
    switch(s) {
        //...
    }
}