我最近走进了一个高尔夫球鞋,要求检查一个字母是否为大写或不超过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'))
答案 0 :(得分:4)
将字符串与{}
进行比较可以有效地将字符串与({}).toString()
的结果进行比较,该结果始终为"[object Object]"
。重要的部分是[
字符,它是最后一个大写字母(Z
)之后的第一个代码点。因此,如果您知道输入字符串是 some 字母,则与以[
开头的字符串进行比较将告诉您这是一个大写字母。
要清楚
s => s<{}
有效
s => s<"[object Object]"
与使用对象({}
)时选择的变量名称无关,但是对于函数引用版本而言,这一点很重要。在这些字符中,“ _”很重要,因为它是“ Z”之后但所有小写字母之前的字符。
答案 1 :(得分:-3)
运算符>
和<
返回true
或false
,具体取决于运算符周围的两个值。如果您尝试分配的类型与布尔型不兼容,那么它将不起作用