【发布时间】:2018-12-04 04:39:45
【问题描述】:
我正在尝试根据驼峰式命名约定向文档对象添加速记。例如,下面的代码将附加document 和qS,这是querySelector 的简写,aEL 是addEventListener 的简写
let b, d, e;
for(let k in(d=document)) d[k[0]+k.split("").filter(_=>_<{}).join("")] = d[k];
e=_=>d.qS(_);
b=_=>d.aEL.bind(_);
我将d 声明为document,然后遍历它的每个键,确定骆驼大小写字母(k[0] 是第一个小写字母,然后我过滤键以查找任何大写字母),然后将第一个小写字母和任何大写字母作为 document 上引用原始方法的新方法 - 尔格 document.querySelector 变为 d.qS
在某个时候,我学会了将字符与大括号进行比较以确定其大小写的技巧。 a.e.
"c"<{}; //false
"C"<{}; //true
"E"<{}; //true
"e"<{}; //false
问题是我不明白它是如何工作的,尽管它似乎一直都能完美地工作。我不确定一个代码块被评估为一个比较,它很难谷歌,即使在筛选了 codegolf 之后,我也没有找到答案。我希望有人能解释一下吗?
注意:我意识到代码解释不受欢迎,但我确实检查了元数据以确定这是否有效https://meta.stackexchange.com/questions/188079/where-to-ask-for-code-explanation
【问题讨论】:
-
如果您检查 alert({}) 那么它将显示 [object Object]。在这里,您的比较将作为字符串比较进行。所以大写字母 A-Z 的 ASCII 值是 65-90。 “[” 的 ASCII 值为 91,小写字母 a-z 的 ASCII 值为 97-122。因此,根据大写字母的 ASCII 值,您的代码返回 true,小写字母返回 false。
-
@KaranPatel - 这是很好的解释,我认为你应该把它写成答案,而不仅仅是评论。
标签: javascript ecmascript-6 conditional-operator