Array.from 메소드는 두 가지 유형의 객체를 실제 배열로 변환하는 데 사용됩니다: 배열 유사 객체(array-like object) 및 순회 가능(iterable) 객체(ES6 새로운 데이터 구조 Set 및 Map 포함).
다음은 배열형 객체인데, Array.from이 이를 실제 배열로 변환합니다.
let arrayLike = { '0': 'a', '1': 'b', '2': 'c', length: 3}; // ES5的写法var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c'] // ES6的写法let arr2 = Array.from(arrayLike); // ['a', 'b', 'c'] Array.from([1, 2, 3]) // [1, 2, 3] Array.from('hello') // ['h', 'e', 'l', 'l', 'o']
Array.from은 배열의 map 메서드와 유사한 두 번째 매개변수도 허용할 수 있으며, 이는 각 요소를 처리하고 처리된 값을 반환된 배열에 넣는 데 사용됩니다. .
Array.from(arrayLike, x => x * x); // 等同于Array.from(arrayLike).map(x => x * x); Array.from([1, 2, 3], (x) => x * x) // [1, 4, 9]
Array.of 메서드는 값 집합을 배열로 변환하는 데 사용됩니다.
Array.of(3, 11, 8) // [3,11,8] Array.of(3) // [3] Array.of(3).length // 1
배열 인스턴스 세 가지 새로운 Method —— 항목 제공 (), keys() 및 values() - 는 배열을 반복하는 데 사용됩니다. 둘 다 for...of 루프를 사용하여 탐색할 수 있는 순회 개체를 반환합니다. 유일한 차이점은 keys()는 키 이름 순회이고, values()는 키 값 순회라는 점입니다. , 항목()은 키-값 쌍 순회입니다.
for (let index of ['a', 'b'].keys()) { console.log(index); } // 0// 1 for (let elem of ['a', 'b'].values()) { console.log(elem); } // 'a'// 'b' for (let [index, elem] of ['a', 'b'].entries()) { console.log(index, elem); } // 0 "a"// 1 "b"1.4.
함수 매개변수에 대한 기본값 설정, 즉 매개변수 정의 바로 뒤에 쓸 수 있습니다.
function log(x, y = 'World') { console.log(x, y);} log('Hello') // Hello World log('Hello', 'China') // Hello China log('Hello', '') // Hello
매개변수 변수는 기본적으로 선언되므로 let 또는 const를 사용하여 다시 선언할 수 없습니다.
function foo(x = 5) { let x = 1; // error const x = 2; // error }
위 코드에서는 매개변수 변수 x가 기본적으로 선언되어 있습니다. 함수 본문에서는 let 또는 const로 다시 선언할 수 없습니다. 그렇지 않으면 오류가 보고됩니다. .
1.5.(1) 배열 병합
스프레드 연산자는 배열 병합을 작성하는 새로운 방법을 제공합니다.
// ES5[1, 2].concat(more) // ES6[1, 2, ...more] var arr1 = ['a', 'b'];var arr2 = ['c'];var arr3 = ['d', 'e']; // ES5的合并数组 arr1.concat(arr2, arr3); // [ 'a', 'b', 'c', 'd', 'e' ] // ES6的合并数组 [...arr1, ...arr2, ...arr3] // [ 'a', 'b', 'c', 'd', 'e' ]1.6.
을 사용하면 "arrow" (=> ; ) 함수를 정의합니다.
var f = v => v;위의 화살표 함수는 다음과 같습니다.
var f = function(v) { return v;};예
$(function() { var a=()=>{ const [a, b, c, d, e] = 'hello'; console.log(a++b++c++d++e); } a();//不带参数 //h__e__l__l__o var b=(name,password)=>{ console.log("用户名:"+name+",密码:"+password); } b("张三","123456");//带参数 //用户名:张三,密码:123456 });1.7.
객체의 속성과 메소드로 직접 작성됩니다. 이런 종류의 글은 더 간결합니다.
var foo = 'bar'; var baz = {foo}; baz // {foo: "bar"} // 等同于var baz = {foo: foo};
上面代码表明,ES6 允许在对象之中,直接写变量。这时,属性名为变量名, 属性值为变量的值。
ES6 一共有5种方法可以遍历对象的属性。
(1)for...in
for...in循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。
(2)Object.keys(obj)
Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)。
(3)Object.getOwnPropertyNames(obj)
Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)。
(4)Object.getOwnPropertySymbols(obj)
Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有 Symbol 属性。
(5)Reflect.ownKeys(obj)
Reflect.ownKeys返回一个数组,包含对象自身的所有属性,不管属性名是 Symbol 或字符串,也不管是否可枚举。
以上的5种方法遍历对象的属性,都遵守同样的属性遍历的次序规则。
首先遍历所有属性名为数值的属性,按照数字排序。
其次遍历所有属性名为字符串的属性,按照生成时间排序。
最后遍历所有属性名为 Symbol 值的属性,按照生成时间排序。
Reflect.ownKeys({ [Symbol()]:0, b:0, 10:0, 2:0, a:0 }) // ['2', '10', 'b', 'a', Symbol()]
上面代码中,Reflect.ownKeys方法返回一个数组,包含了参数对象的所有属性。这个数组的属性次序是这样的,首先是数值属性2和10,其次是字符串属性b和a,最后是 Symbol 属性。
注释:对于Object.values等ES2017刚出来的函数,大多数浏览器不支持,暂时就不列出来了
위 내용은 배열, 함수, 객체에 대한 JavaScript ES6 확장의 공통 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!