字符串对象在比较时如何变换?

use*_*273 8 javascript

console.log("20">10);  //true 
console.log("20a">"10");  //true 
console.log("20a">10);  //false
Run Code Online (Sandbox Code Playgroud)

我想知道为什么最后一个变为假.并且"20a"转换为比较前的内容.

lon*_*day 7

比较运算符的MDN页面:

对于关系抽象比较(例如<=),操作数首先在比较之前转换为基元,然后转换为相同的类型.

console.log("20">10);  //true 
Run Code Online (Sandbox Code Playgroud)

这将转换"20"为数字20并进行比较.既然20大于10,那就是真的.

console.log("20a">"10");  //true 
Run Code Online (Sandbox Code Playgroud)

这比较了两个字符串.由于"20a"比(按字母顺序)更大"10",因此确实如此.

console.log("20a">10);  //false
Run Code Online (Sandbox Code Playgroud)

这会转换"20a"为数字.结果是NaN(做到+"20a"这一点).NaN不大于任何数字,因此返回false.