<和>运算符如何工作

时间:2019-09-30 15:10:11

标签: javascript node.js javascript-objects

我最近走进了一个高尔夫球鞋,要求检查一个字母是否为大写或不超过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'))

2 个答案:

答案 0 :(得分:4)

将字符串与{}进行比较可以有效地将字符串与({}).toString()的结果进行比较,该结果始终为"[object Object]"。重要的部分是[字符,它是最后一个大写字母(Z)之后的第一个代码点。因此,如果您知道输入字符串是 some 字母,则与以[开头的字符串进行比较将告诉您这是一个大写字母。

要清楚

s => s<{}

有效

s => s<"[object Object]"

与使用对象({})时选择的变量名称无关,但是对于函数引用版本而言,这一点很重要。在这些字符中,“ _”很重要,因为它是“ Z”之后但所有小写字母之前的字符。

答案 1 :(得分:-3)

运算符><返回truefalse,具体取决于运算符周围的两个值。如果您尝试分配的类型与布尔型不兼容,那么它将不起作用