javascript - 在 JavaScript 中用 '<' 和 '>' 运算符比较两个字符串

标签 javascript arrays string

比较运算符,如 ><返回 Boolean当他们的输入作为两个字符串值给出时的值。

我尝试了几个例子:

/* String vs String */
console.log('firstName' < 'lastname'); // true
console.log('firstName' < 'Firstname'); // false
console.log('!firstName' < 'lastname'); // true
console.log('!firstName' < 'Firstname'); // true
console.log('!firstName' < '!Firstname'); // false
console.log('!firstName' < '_!Firstname'); // true
console.log('@!firstName' < '_!Firstname'); // true
console.log('@!firstName' < '2_!Firstname'); // false

/* String vs Number */
console.log('@!firstName' < 2); // false
console.log('@!firstName' < -1); // false

/* String vs Special Numbers */
console.log('@!firstName' < Infinity); // false
console.log('@!firstName' < -Infinity); // false
console.log('@!firstName' < -Infinity + Infinity); // false

/* String vs NaN */
console.log('@!firstName' < NaN); // false
console.log(NaN.toString()); // "NaN"
console.log('@!firstName' < "NaN"); // true

/* String vs Arrays */
console.log('firstName' < [Infinity, -Infinity]); // false
console.log('firstName' < ['Firstname', Infinity, -Infinity]); // false
console.log('firstName' < ['2_Firstname', Infinity, -Infinity]); // false

我真的很想知道 JavaScript 是如何计算这些表达式的。在上面的例子中,我发现这个是最吸引人的一个console.log('@!firstName' < Infinity); // false .

所以,我的问题是:

如何使用“大于”和“是”进行比较 在这些场景中,JavaScript 中的小于 "运算符(来自上面的示例):

  1. 字符串与字符串,
  2. 字符串与数字,
  3. 字符串与特殊数字,
  4. 字符串与 NaN,
  5. 字符串与数组

最佳答案

如上所述,正式规范在标准中:http://www.ecma-international.org/ecma-262/7.0/#sec-abstract-relational-comparison ,通俗地说逻辑是这样的:

1) 字符串与字符串

将两个字符串拆分为 16 位代码单元并进行数值比较。请注意,代码单元 != 字符,例如"cafè" < "cafè"true (真的)。

2) 字符串与其他原语

将两者都转换为数字。如果其中之一是 NaN , 返回 false ,否则进行数值比较。 +0-0被认为是平等的,+/-Infinity比其他任何东西都大/小。

3) 字符串与对象

尝试将对象转换为原始对象,按顺序尝试 [Symbol.toPrimitive]("number") , valueOftoString .如果我们有字符串,则继续执行 1),否则继续执行 2)。特别是对于数组,这将调用 toStringjoin 相同.

关于javascript - 在 JavaScript 中用 '<' 和 '>' 运算符比较两个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56094122/

相关文章:

php - 按一列对二维数据进行分组并对另一列求和以生成关联数组

c - 将指针数组分配给数组

c++ - 如何从 C++ 中的 istream 中干净地提取字符串分隔字符串

c - 从 STDIN 读取一行以仅使用 C 提取数字标记

javascript - 难以尝试在选择器的迷你对象中使用 .find() 和 .children

javascript - 将 Iframe 数据拆分为不同的变量

php - 如果后验证成功,则禁用 e.preventDefault()

string - 系统级别的整数和字符串比较

string - 将值保存到 block 而不是表示它的单词标签

javascript - jQuery:使用 parent()、next() 对单击单选按钮进行样式设置和取消样式设置