New In JavaScript 1.6

이 글은 Mozilla의 'New In JavaScript 1.6'을 정리한 것입니다.

E4X

ECMAScript for XML의 약자인데 간단하게 말해서 JavaScript에서 XML을 다루는 법입니다. JavaScript로 XML을 다룰 일은 별로 없으므로 생략합니다.

Array extras

JavaScript 1.6에 추가된 Array 메소드.

indexof()

indexOf(searchElement[, fromIndex]) searchElement가 해당 Array에서 처음 발견되는 위치를 반환한다.

var a = ['a', 'b', 'a', 'b', 'a'];
alert(a.indexOf('b')); // Alerts 1
// Now try again, starting from after the last match
alert(a.indexOf('b', 2)); // Alerts 3
alert(a.indexOf('z')); // Alerts -1, because 'z' was not found

lastIndexOf()

lastIndexOf(searchElement[, fromIndex]) indexOf()와 비슷한데 역순으로 검색한다.

var a = ['a', 'b', 'c', 'd', 'a', 'b'];
alert(a.lastIndexOf('b')); // Alerts 5
// Now try again, starting from before the last match
alert(a.lastIndexOf('b', 4)); // Alerts 1
alert(a.lastIndexOf('z')); // Alerts -1

every()

every(callback[, thisObject]) callback이 모든 item에 적용되는데, 모든 callback이 true를 반환하면 true를 반환한다.

function isNumber(value){
  return typeof value == 'number';
}
var a1 = [1, 2, 3];
alert(a1.every(isNumber)); // Alerts true
var a2 = [1, '2', 3];
alert(a2.every(isNumber)); // Alerts false

filter()

filter(callback[, thisObject]) callback이 true를 반환하는 item을 새 Array에 담아 반환한다.

var a1 = ['a', 10, 'b', 20, 'c', 30];
var a2 = a1.filter(function(item) { return typeof item == 'number'; });
alert(a2); // Alerts 10,20,30

forEach()

forEach(callback[, thisObject]) 모든 아이템에 callback을 실행한다.

var a = ['a', 'b', 'c'];
a.forEach(alert); // Alerts each item in turn

map()

map(callback[, thisObject]) item마다 callback를 실행하고 callback이 반환하는 item을 새로운 Array에 담아 반환한다.

var a1 = ['a', 'b', 'c'];
var a2 = a1.map(function(item) { return item.toUpperCase(); });
alert(a2); // Alerts A,B,C

some()

some(callback[, thisObject]) item마다 callback을 실행하고 callback이 적어도 하나 true를 반환하면 true를 반환한다.

function isNumber(value){
  return typeof value == 'number';
}
var a1 = [1, 2, 3];
alert(a1.some(isNumber)); // Alerts true
var a2 = [1, '2', 3];
alert(a2.some(isNumber)); // Alerts true
var a3 = ['1', '2', '3'];
alert(a3.some(isNumber)); // Alerts false

Array and String generics

Array 메소드를 String에도 사용할 수 있다. String을 각 Character의 Array로 취급한다.

원래는 String이 전부 소문자인지 검사하는 함수를 다음과 같이 해야 했다:

function isLetter(character) {
  return (character >= "a" && character <= "z");
}

if (Array.prototype.every.call(str, isLetter))
  alert("The string '" + str + "' contains only letters!");

JavaScript 1.6부터 다음과 같은 Generic도 지원한다:

if (Array.every(str, isLetter))
  alert("The string '" + str + "' contains only letters!");

마찬가지로 String 메소드를 다른 객체에 사용할 수도 있다:

var num = 15;
alert(String.replace(num, /5/, '2'));

For each … in

그냥 쓰고 있었는데 이 구문도 JavaScript 1.6부터 지원되는 것임. Obejct의 Property의 값을 iterate한다:

var sum = 0;
var obj = {prop1: 5, prop2: 13, prop3: 8};
for each (var item in obj) {
  sum += item;
}
print(sum); // prints "26", which is 5+13+8

JavaScript 1.6 compatibility

브라우저 호환 테이블은 여기