在Coffeescript中,以下给出 true
"s" in "asd" # true
Run Code Online (Sandbox Code Playgroud)
但这给出了错误
"as" in "asd" # false
Run Code Online (Sandbox Code Playgroud)
in
不适合这项任务?x in y
coffeescript的语法期望y
是一个数组或类似对象的数组。给定一个字符串,它将把它转换成一个字符数组(不是直接转换成字符数组,但是它将像遍历数组一样遍历字符串的索引)。
所以你使用in
:
"as" in "asd"
# => false
Run Code Online (Sandbox Code Playgroud)
相当于
"as" in ["a","s","d"]
# => false
Run Code Online (Sandbox Code Playgroud)
这样一来,更容易弄清为什么它返回false。
包括
通常,检查值是否在数组内是由indexOf()完成的,这相当令人费解,因为Internet Explorer尚未实现它,所以它仍然需要填充程序。
Run Code Online (Sandbox Code Playgroud)var included = (array.indexOf("test") != -1)
CoffeeScript具有Python工作者可以识别的一种巧妙的替代方法。
Run Code Online (Sandbox Code Playgroud)included = "test" in array
在后台,CoffeeScript使用Array.prototype.indexOf(),并在必要时进行填充以检测该值是否在数组内部。不幸的是,这意味着相同的语法不适用于字符串。我们需要恢复使用indexOf()并测试结果是否为负:
Run Code Online (Sandbox Code Playgroud)included = "a long test string".indexOf("test") isnt -1
甚至更好的是,劫持按位运算符,这样我们就不必进行-1比较。
Run Code Online (Sandbox Code Playgroud)string = "a long test string" included = !!~ string.indexOf "test"
就个人而言,我会说按位破解不是很清晰,应该避免。
我会用以下任何一种写您的支票indexOf
:
"asd".indexOf("as") != -1
# => true
Run Code Online (Sandbox Code Playgroud)
或正则表达式匹配:
/as/.test "asd"
# => true
Run Code Online (Sandbox Code Playgroud)
或者如果您使用的是ES6,请使用 String#includes()
归档时间: |
|
查看次数: |
2550 次 |
最近记录: |