我最近遇到了一个高尔夫套路,要求检查一个字母是否为大写或不超过 9 个字符。
用户的回答有点吓人(这些例子也适用于 >
以相反的顺序):
f=s=>s<{}
f=c=>c<{}
f=_=>_<f
f=Z=>Z<f
有些变量名不适用于 f
:
f=a=>a<f
f=z=>z<f
为什么以及如何<
和 >
运算符在将函数与基本字符串进行比较时有效吗?也许指针比较?
自己试试:
// working
f1=s=>s<{}
f2=c=>c<{}
f3=_=>_<f3
f4=Z=>Z<f4
// not working
f5=s=>s<f5
console.log('f1', f1('A'))
console.log('f1', f1('a'))
console.log('f2', f2('A'))
console.log('f2', f2('a'))
console.log('f3', f3('A'))
console.log('f3', f3('a'))
console.log('f4', f4('A'))
console.log('f4', f4('a'))
console.log('f5', f5('A'))
console.log('f5', f5('a'))
最佳答案
将字符串与 {}
进行比较实际上是将字符串与 ({}).toString()
的结果进行比较,后者始终是 "[object对象]”
。重要的部分是 [
字符,它是最后一个大写字母 (Z
) 之后的第一个代码点。因此,如果您知道输入字符串是一些 字母,与以[
开头的字符串进行比较会告诉您它是一个大写字母。
要清楚,
s => s<{}
有效
s => s<"[object Object]"
它与您在使用对象 ({}
) 时选择的变量名称无关,但它对于函数引用版本很重要。其中,“_”很重要,因为它是“Z”之后但所有小写字母之前的字符。
关于javascript - < 和 > 运算符如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58170676/