javascript - JQuery 检查变量是否是函数

标签 javascript jquery

如何检查返回变量是否是函数?

var testController = function() {
  alert('123');
}

$(function() {
  $('[mfour]').each(function(e, t) {
    var a = $(t).attr('mfour');
    console.log($.isFunction(testController));
    console.log($.isFunction(a));
  })
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div mfour="testController">asd</div>

请注意,首先 console.log当函数名称在第二个 console.log 上被硬编码时,返回 TRUE如果正在评估变量,则返回 FALSE。

这有点奇怪,因为 var a返回testController .

这是jsFiddle .

我的目标是基于 mfour 属性运行某些函数。所以在上面的例子中,testController将运行testController函数。

最佳答案

在您的示例中,要获取对 testFunction 的引用(如果它在范围内),您可以使用 eval。是的,我说过了,eval,所以您必须知道,如果您不对函数名称进行清理,则用户可能会操纵该字符串来运行恶意代码;

var testController = function() {
  alert('123');
}

$(function() {
  $('[mfour]').each(function(e, t) {
    var a = eval($(t).attr('mfour'));
    console.log($.isFunction(testController));
    console.log($.isFunction(a));
  })
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div mfour="testController">Hello</div>

关于javascript - JQuery 检查变量是否是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32588319/

相关文章:

php - 页面加载对象两次

javascript - BackboneJS View 渲染延迟,在 iPhone 4s (iOS 8) 上,2015 年

javascript - 使用 jQuery Javascript 解析 SRT 文件

javascript - 如何使用 Puppeteer 和 Headless Chrome 通过文本选择元素

jquery - 当一个 VideoJS 实例启动时,如何暂停页面上所有正在播放的 VideoJS 实例?

javascript - 将表单序列化为 javascript 对象的特殊情况

javascript - 无法附加到节点

javascript - 如何让 Parse 查询只返回 x 个结果?

javascript - JS浏览器加载动画

jquery - 我可以更改 jqGrid 中新添加的行的 ID 吗?