我有这个代码:
for (var i = 0; i < value.length; i++) {
if (typeof value[i].keyword == 'undefined' || value[i].keyword == null || value[i].keyword.startsWith(keyword)) {
out.push(value[i]);
}
}我收到一条错误消息:
TypeError: R
E
.startsWith不是js-cf2cc68…上的函数>.min.js.gz:85 >在fn (编译时求值(js-cf2cc68….min.js.gz:8),:4:1003) >在js-cf2cc68….min.js.gz:7 >第$摘要(js-cf2cc68….min.js.gz:7) >第$apply (js-cf2cc68….min.js.gz:7) >在HTMLBodyElement。(js-cf2cc68….min.js.gz:9)
这怎么可能呢?我想我已经把一切都解释清楚了。
发布于 2016-08-07 18:13:47
因为start with的参数必须是字符串。
所以这样做效果会更好
for (var i = 0; i < value.length; i++) {
if (typeof value[i].keyword == String(undefined) || value[i].keyword.startsWith("keyword"))
out.push(value[i]);
}发布于 2017-11-20 08:29:23
找到
一篇有用的文章
关于这个主题
转换为字符串的三种方法是:
value.toString()
"“+值
字符串(值)
这里要注意的一点是,如果值为空或未定义,则方法#1不起作用。
在我的例子中,方法#2由于某种原因也不起作用,所以最好的选择是String(value)
var col = "rt_" + rows[i]["results"][r].ResultTypeID.substring(1); //did not work
var col = "rt_" + String(rows[i]["results"][r].ResultTypeID).substring(1);发布于 2016-08-07 19:11:18
有没有一种方法可以让我检查它是否是一个字符串,而不是让它出错?
检查类型?
var out = values.filter(v => v.keyword == null || typeof v.keyword === "string" && v.keyword.startsWith( keyword ));或者简单地强制类型
var out = values.filter(v => v.keyword == null || String(v.keyword).startsWith( keyword ));或者,如果你使用反结构,你甚至可以使用这个:
var out = values.filter({keyword: v}) => v == null || String(v).startsWith( keyword ));我建议您使用Array方法,而不是手动编写循环。
国际海事组织。它能更好地描述你的意图(很适合浏览代码)。
如果这是一条热门路径(经常被调用),JS优化器可以利用知道你只是在过滤代码的优势,并对代码进行优化。也许可以跳过循环期间对Array执行的大量完整性检查。
如果这不是热路径,那么在JS中,调用几次函数的性能影响甚至很难衡量。
https://stackoverflow.com/questions/38813040
复制相似问题