首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >startsWith不是一个无缘无故被调用的函数

startsWith不是一个无缘无故被调用的函数
EN

Stack Overflow用户
提问于 2016-08-07 18:06:13
回答 5查看 43.6K关注 0票数 9

我有这个代码:

代码语言:javascript
复制
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)

这怎么可能呢?我想我已经把一切都解释清楚了。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-08-07 18:13:47

因为start with的参数必须是字符串。

所以这样做效果会更好

代码语言:javascript
复制
for (var i = 0; i < value.length; i++) {
    if (typeof value[i].keyword == String(undefined) || value[i].keyword.startsWith("keyword"))
        out.push(value[i]);
}
票数 10
EN

Stack Overflow用户

发布于 2017-11-20 08:29:23

找到

一篇有用的文章

关于这个主题

转换为字符串的三种方法是:

value.toString()

"“+值

字符串(值)

这里要注意的一点是,如果值为空或未定义,则方法#1不起作用。

在我的例子中,方法#2由于某种原因也不起作用,所以最好的选择是String(value)

代码语言:javascript
复制
var col = "rt_" + rows[i]["results"][r].ResultTypeID.substring(1); //did not work

var col = "rt_" + String(rows[i]["results"][r].ResultTypeID).substring(1);
票数 4
EN

Stack Overflow用户

发布于 2016-08-07 19:11:18

有没有一种方法可以让我检查它是否是一个字符串,而不是让它出错?

检查类型?

代码语言:javascript
复制
var out = values.filter(v => v.keyword == null || typeof v.keyword === "string" && v.keyword.startsWith( keyword ));

或者简单地强制类型

代码语言:javascript
复制
var out = values.filter(v => v.keyword == null || String(v.keyword).startsWith( keyword ));

或者,如果你使用反结构,你甚至可以使用这个:

代码语言:javascript
复制
var out = values.filter({keyword: v}) => v == null || String(v).startsWith( keyword ));

我建议您使用Array方法,而不是手动编写循环。

国际海事组织。它能更好地描述你的意图(很适合浏览代码)。

如果这是一条热门路径(经常被调用),JS优化器可以利用知道你只是在过滤代码的优势,并对代码进行优化。也许可以跳过循环期间对Array执行的大量完整性检查。

如果这不是热路径,那么在JS中,调用几次函数的性能影响甚至很难衡量。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38813040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档