【问题标题】:How does < and > operators works< 和 > 运算符如何工作
【发布时间】:2020-01-29 21:54:15
【问题描述】:

我最近遇到了一个高尔夫 kata,要求检查一个字母是否为大写字母,是否不超过 9 个字符。

用户的回答有点吓人(这些例子也适用于 &gt; 以相反的顺序):

f=s=>s<{}
f=c=>c<{}
f=_=>_<f
f=Z=>Z<f

一些变量名不适用于f

f=a=>a<f
f=z=>z<f

在将函数与基本字符串进行比较时,&lt;&gt; 运算符为何以及如何工作?也许指针比较?

自己试试吧:

// 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'))

【问题讨论】:

  • 它只是用于和类似条件中的算术
  • spec里都有解释。

标签: javascript node.js javascript-objects


【解决方案1】:

运算符&gt;&lt; 根据运算符周围的两个值返回truefalse。如果您尝试分配与布尔值不兼容的类型,则它将不起作用

【讨论】:

  • 这真的没有多大意义。
【解决方案2】:

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

说清楚,

s => s<{}

有效

s => s<"[object Object]"

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

【讨论】:

  • 另外对于 f5 不起作用的混淆,这是因为 f5.toString() 会以 's' 开头
  • 但是为什么f3f4 有效而f5 无效?
  • @D.Nathanael abd f3 有效,因为“_”出现在编码序列中的所有大写字母之后。请注意,在几乎任何情况下,在实际生产代码中使用任何这些都是疯狂的。
  • 我还是不明白为什么 f5 不能使用名为s 的参数。别担心,这个怪物不会继续生产哈哈!
  • f5 的“字符串化”版本的第一个字符是“s”,这意味着我在答案中所说的完全错误(我会编辑它)。 "a" 小于 "s"。
猜你喜欢
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 2016-10-25
  • 2017-11-30
相关资源
最近更新 更多