我知道有更好的方法来检查我的空绳子。
这通常是不检查空字符串。我实际上在做类似的事情:
var s = /*who knows?*/;
switch (s.charAt(0)) {
// ...
}
并想知道我是否可以避免额外的if (!s)
。
答案 0 :(得分:4)
是的,只要该值是有效字符串即可。 language spec的第15.5.4.4节说
- 让位置为ToInteger(pos)。
- 设大小为S中的字符数。
- 如果位置< 0或位置≥大小,返回空字符串。
醇>
自ES3以来没有改变。解释器在字符串函数兼容性方面非常出色。
那就是说,我最近为charAt
到Closure 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) {
//...
}
}