在Coffeescript中,以下内容为true
"s" in "asd" # true
但是这会给出错误的
"as" in "asd" # false
in
不适合此任务吗?答案 0 :(得分:6)
x in y
语法要求y
是一个数组,或者像对象一样的数组。给定一个字符串,它会将它转换为一个字符数组(不是直接的,但它会遍历字符串的索引,就像它是一个数组一样)。
所以你使用in
:
"as" in "asd"
# => false
相当于
"as" in ["a","s","d"]
# => false
这样就可以更容易地看出它返回false的原因。
little book of coffeescript可以在in
上说明这一点:
含
检查一个值是否在数组内部通常是使用indexOf()来完成的,因为Internet Explorer还没有实现它,所以相当令人难以置信地仍需要填充程序。
var included = (array.indexOf("test") != -1)
CoffeeScript有一个很好的替代方案,Pythonist可以识别,即。
included = "test" in array
在幕后,CoffeeScript正在使用Array.prototype.indexOf(),并在必要时进行匀场,以检测值是否在数组内。不幸的是,这意味着语法相同不适用于字符串。我们需要恢复使用indexOf()并测试结果是否为负数:
included = "a long test string".indexOf("test") isnt -1
或者甚至更好,劫持按位运算符,这样我们就不必进行-1比较。
string = "a long test string" included = !!~ string.indexOf "test"
就个人而言,我会说按位破解不是很清晰,应该避免。
我会用indexOf
编写支票:
"asd".indexOf("as") != -1
# => true
或与正则表达式匹配:
/as/.test "asd"
# => true
或者如果您使用的是ES6,请使用String#includes()