Javascript的答案会根据比较顺序而改变
Javascript answer changes depending on comparison order
我对Javascript比较陌生(先学了Ruby),但是一直被我看到的一些奇怪的不一致所迷惑,我试图找出底层机制是什么,这样我就能更好地理解这种语言。其中之一是,当我做比较时,两个元素在===符号的哪一边并不重要,但我见过这种情况,不明白为什么。下面是查看字符串是否按字母顺序排序的基本函数示例:
这个版本总是返回true:
function sorted(str) {
var arr = str.split("");
return arr.sort().join('') === arr.join('');
}
sorted('abc') // => true
sorted('cba') // => true
而这将返回正确的答案:
function sorted(str) {
var arr = str.split("");
return arr.join('') === arr.sort().join('');
}
sorted('abc') // => true
sorted('cba') // => false
我试着弄清楚这个问题,但我很困惑——有人能帮我解释一下吗?
谢谢!
与Array.prototype
的大多数方法不同,sort()
在适当的位置操作对象。因此,在您的第一个代码片段中,===
的第二个操作数中的arr
已经排序,比较总是返回true
。
相关文章:
- 比较从函数和生成的日期对象
- 如何使用 node.js 比较两个 json 数组
- ajax请求的顺序总是不同的
- 按照选项卡索引的顺序循环一个jQuery选择
- jQuery自定义验证比较多个输入的序列
- 匹配一个单词,其中候选人可以跨越顺序组(跨度)
- 按顺序添加和删除类
- 反向字符串比较
- 按我自己的类克隆另一个元素的内容和顺序
- 通过JSON&比较时间
- 将DOM节点值与字符串Javascript进行比较
- 关于如何比较多个数组的确切顺序和内容的建议
- 记住比较器函数的参数顺序的技巧是什么
- 按字母顺序比较 2 个字符串以进行排序
- 主干:使用比较器反向采集顺序
- 将数组与对象键进行比较并保持顺序
- Javascript的答案会根据比较顺序而改变
- Javascript比较运算符顺序
- 为什么角顺序自定义比较器不能工作
- 比较运算符中操作数的顺序