不带参数或括号的 JavaScript 切片(CodeMirror sql-hint.js 中的代码)

标签 javascript slice codemirror

我正在改编来自优秀的 CodeMirror 的 sql-hint.js 代码为了我的邪恶计划......

但是我遇到了一行超出我能力范围的 JavaScript。我不明白它,也找不到任何解释它的内容。

它位于 CodeMirror-master\addon\hint\sql-hint.js 中的第 34 行,如下所示:

function getItem(list, item) {
     if (!list.slice) return list[item];     // <--- THIS LINE!!!!!
for (var i = list.length - 1; i >= 0; i--) if (getText(list[i]) == item)
    return list[i];
}

我不明白的命令是这样的:

if (!list.slice)

没有参数,也没有括号。 这里到底发生了什么?我认为魔法...

请注意,它没有这么说:

if (!list.slice())

最佳答案

JavaScript 是一种真/假语言,这意味着我们可以根据某些标准断言给定对象是真还是假。在 JavaScript 中,始终报告为 false 的值有:false0(零) ""(空字符串)null未定义NaN

此处的检查旨在查明 list.slice 是否为 undefined,如果是,则返回索引 item 处的列表项.

如果您要console.log(list.slice),您会期望类似function () {}的内容。但我们不想调用该函数,因为如果 slice 未定义,调用将会失败。

关于不带参数或括号的 JavaScript 切片(CodeMirror sql-hint.js 中的代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33165787/

相关文章:

javascript - 数据绑定(bind)未正确传递到 ng-repeat 内的 Controller 功能参数

javascript - jQuery $.getJSON 不工作

json - 将 JSON 解码为具有独特元素的 map slice

codemirror - 如何在 CodeMirror 中以编程方式添加新行?

java - 使用 native JS 的 GWT JSNI 方法 : "Invalid Label"

javascript - Bootstrap 4 Accordion 单击时滚动到事件卡的顶部

javascript - 使用 jQuery 打开多个选项卡

javascript - args.slice(1) 如何分隔传递给 PhantomJS 的参数和 forEach(function(arg, i)... function 来工作?

python - 哪些语言具有与 Numpy 相似或等效的数组切片符号,为什么它不更常见?

javascript - 修改Ajax.org Cloud9 Editor(Ace Editor)的装订线