我正在改编来自优秀的 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 的值有:false
、0(零)
""(空字符串)
、null
、未定义
、NaN
。
此处的检查旨在查明 list.slice
是否为 undefined
,如果是,则返回索引 item
处的列表项.
如果您要console.log(list.slice)
,您会期望类似function () {}
的内容。但我们不想调用该函数,因为如果 slice
未定义,调用将会失败。
关于不带参数或括号的 JavaScript 切片(CodeMirror sql-hint.js 中的代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33165787/