官术网_书友最值得收藏!

Sets

ECMAScript 6 introduces sets. Sets are collections of values and can be iterated in the order of the insertion of their elements. An important characteristic about sets is that a value can occur only once in a set.

The following snippet shows some basic operations on sets:

var mySet = new Set();
mySet.add(1);
mySet.add("Howdy");
mySet.add("foo");

mySet.has(1); // true
mySet.delete("foo");
mySet.size; // 2

for (let item of mySet) console.log(item);
// 1
// "Howdy"

We discussed briefly that JavaScript arrays are not really arrays in a traditional sense. In JavaScript, arrays are objects that have the following characteristics:

  • The length property
  • The functions that inherit from Array.prototype (we will discuss this in the next chapter)
  • Special handling for keys that are numeric keys

When we write an array index as numbers, they get converted to strings—arr[0] internally becomes arr["0"]. Due to this, there are a few things that we need to be aware of when we use JavaScript arrays:

  • Accessing array elements by an index is not a constant time operation as it is in, say, C. As arrays are actually key-value maps, the access will depend on the layout of the map and other factors (collisions and others).
  • JavaScript arrays are sparse (most of the elements have the default value), which means that the array can have gaps in it. To understand this, look at the following snippet:
    var testArr=new Array(3);
    console.log(testArr); 

    You will see the output as [undefined, undefined, undefined]undefined is the default value stored on the array element.

Consider the following example:

var testArr=[];
testArr[3] = 10;
testArr[10] = 3;
console.log(testArr);
// [undefined, undefined, undefined, 10, undefined, undefined, undefined, undefined, undefined, undefined, 3]

You can see that there are gaps in this array. Only two elements have elements and the rest are gaps with the default value. Knowing this helps you in a couple of things. Using the for...in loop to iterate an array can result in unexpected results. Consider the following example:

var a = [];
a[5] = 5;
for (var i=0; i<a.length; i++) {
  console.log(a[i]);
}
// Iterates over numeric indexes from 0 to 5
// [undefined,undefined,undefined,undefined,undefined,5]

for (var x in a) {
  console.log(x);
}
// Shows only the explicitly set index of "5", and ignores 0-4
主站蜘蛛池模板: 商南县| 辉县市| 玛多县| 浏阳市| 南通市| 金湖县| 容城县| 高邑县| 勐海县| 屏东县| 兰坪| 仁怀市| 柏乡县| 富宁县| 道孚县| 芒康县| 东平县| 乐昌市| 将乐县| 武强县| 广元市| 新余市| 乌拉特后旗| 灵丘县| 义马市| 海安县| 金湖县| 江城| 南靖县| 冕宁县| 都安| 合山市| 扎赉特旗| 长白| 白城市| 社旗县| 沙雅县| 康保县| 高碑店市| 民县| 南澳县|