javascript - Masalah pelaksanaan indexof array?
迷茫
迷茫 2017-06-14 10:54:26
0
1
586

Di antaranya

var O = Object(this);
var len = O.length >>> 0;

Apakah maksud kedua-dua ayat ini?

if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function(searchElement, fromIndex) {
    var k;
    if (this == null) {
      throw new TypeError('"this" is null or not defined');
    }
    var O = Object(this);
    var len = O.length >>> 0;
    if (len === 0) {
      return -1;
    }
    var n = +fromIndex || 0;
    if (Math.abs(n) === Infinity) {
      n = 0;
    }
    if (n >= len) {
      return -1;
    }
    k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
    while (k < len) {
      if (k in O && O[k] === searchElement) {
        return k;
      }
      k++;
    }
    return -1;
  };
}
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

membalas semua(1)
我想大声告诉你

Objek(ini) bukan untuk mencipta objek baharu, tetapi untuk menukarkannya kepada Objek Ia secara semula jadi tidak berguna untuk objek yang merupakan Objek itu sendiri, seperti Array dan Objek.

O.length >>> 0这里的三个大于号可不是表示始终大于等于0,而是JS的一个位运算符,表示无符号位移,后面的0表示位移0位,不过JS在执行无符号位移之前,会转成无符号32位整数来计算,所以>>>0表示的就是把O.lengthTukar kepada integer positif.

Mengapa kita memerlukan dua langkah ini Bukankah Array JS sudah menjadi Objek? Bukankah array.length itu sendiri adalah integer bukan negatif? Itu kerana fungsi ini ialah fungsi universal dan boleh dipanggil oleh bukan Array menggunakan panggilan

Array.prototype.indexOf.call("abc","c") // 2
"abc" di sini ialah ini dalam badan fungsi Ia adalah jenis asas dan perlu dibungkus ke dalam Objek untuk menggunakan yang berikut dalam sintaks.

0 in "ab" // TypeError
0 in Object("ab") // true
Dan kita boleh menggunakan kaedah Array.prototype.indexOf bukan sahaja pada jenis asas, tetapi juga pada Objek bukan Array Pada masa ini, panjang ditentukan oleh kita sendiri dan tidak boleh dijamin sebagai integer positif, jadi ia perlu ditukar kepada nilai bukan Array di dalam fungsi.

var obj = {"0":"hello","1":"world",length:2.7568}
Array.prototype.indexOf.call(obj,"world") //1
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!