发布于 2026-01-06 3 阅读
0

JS, method behind the madness. Hi There, Welcome to my first Post ☄

JS,疯狂背后的方法。

大家好,欢迎来到我的第一篇帖子☄

大家好,欢迎来到我的第一篇帖子☄

一切都始于这个梗图。
替代文字

一位朋友说我现在成了 JavaScript 的拥趸。说实话,我当时很生气(主要是因为我无言以对),所以我决定亲自试一试,以此证明他是对的。如果你不够精通 JavaScript,它或许能蒙混过关。让我来演示一下问题所在。

给定一个数字数组 [6,-2,2,-7],请使用 Ruby 和 JS 的 Sort 方法对其进行排序.sort()
在 JS 中:

    const array = [6,-2,2,-7];
    array.sort();

    // The result is: [ -2, -7, 2, 6 ]

在 Ruby 中:

 array = [6,-2,2,-7];
 array.sort();

 # The Result is:  [-7, -2, 2, 6]

现在,我希望你已经明白了。如果你是初学者,给定几个数字,让计算机用不同的编程语言对数字进行排序,一种语言(Ruby)会给出正确的排序结果,而另一种语言(JS)则会给出不太正确的结果。

出现这种情况的原因是,JavaScript 是一门很特别的语言。不是特别特别,只是与众不同。JavaScript 的 sort 方法使用原地排序算法来遍历数组元素。

这基本上意味着,它将数组中的元素转换为字符串序列,然后比较这些字符串的 UTF-16 编码单元值。简单来说,就是将数字转换成单独的字母字符串,并按顺序排列。
现在,排序方法本身并没有问题,为了了解这个底层原地算法的工作原理,我们来对一些字符串进行排序。

给定一个名称数组:

    const array = ["Daniel", "Bob", "Fizz", "Buzz", "Cynthia"];
    array.sort();

    // The result is: [ 'Bob', 'Buzz', 'Cynthia', 'Daniel', 'Fizz' ]

搞定啦☄☄ 之所以有效,是因为我们正在对字符串进行排序。sort 方法的默认行为会将所有值都视为字符串。

别担心,你可以使用 `a` 来覆盖此行为parameter function
系好安全带,这可能有点复杂。该函数本身接受两个参数(a,b),例如 `a` 和 `b`。要了解有关该函数及其功能的更多信息,请阅读文档。该函数基本上只是检查 a 和 b 是否小于、大于或等于另一个,并据此对它们进行排序,而不管数据类型如何。

要告诉排序方法将数组中的元素视为数字,可以使用以下代码just subtract the parameters (a,b) of the parameter function of the sort method。这将使元素按升序排列,而不管数据类型如何。
可能有点令人困惑,让我来演示一下:

    //given a and b are parameters of Compare function which we pass to the sort method.
     const array = [6,-2,2,-7];
        array.sort(function(a,b){
        return a-b;
    });

    // The result will be correct, you can check 😉

哎呀,看起来好奇怪,我们还是找些fat arrow function正常人重新来一遍吧。

    const array = [6,-2,2,-7];
    array.sort((a, b) => return a - b);

    // The result will be correct, you can check again 😉

现在情况好多了,这要感谢pentacular

瞧,一个排序良好的数组就此诞生。

结论

这个故事的寓意是:如果你有农场,我强烈建议你还是去务农吧,因为用 JavaScript 跟电脑打交道迟早会让你崩溃的。哈哈!开玩笑啦,JavaScript 的确有很多奇奇怪怪的地方,但当你爱上一样东西时,你也会爱上它的缺点。
友情提示,如果你实在不喜欢 JavaScript 的那些奇葩之处,可以试试微软的TypeScript ,它在 JavaScript 的基础上提供了类型和其他一些很棒的功能。

下次再吐槽!

丹尼尔·卡通吉·丹尼斯

文章来源:https://dev.to/katungi/js-method-behind-the-madness-10ff