ES6 - 함수 디폴트 기본값에 대한 흥미로운 사례
ES6 - 함수 디폴트 기본값에 대한 흥미로운 사례
이 작은 사례를 말하기 전에 먼저 ES6의 해체와 기본값 부여 PS를 간단하게 정리한다. 이미 알고 있는 동지의 동지는 밤을 직접 볼 수 있다.
1. ES6의 해체
ES6에서 구성 값을 이해하는 조작을 도입했는데 그 역할은 값을 수조
Array
또는 속성을 대상 Object
에서 서로 다른 변수로 추출하는 것이다.즉 두 가지 상황으로 나뉜다. 수조
Array
에서 해체하고 대상 Object
에서 해체한다.①.수조에서 해체하다
const [a, b] = [1, 2]
//a = 1, b = 2
물론 이것들은 기본적인 수조 해체 부수값입니다. 당신은 쉼표
,
으로 크로스 해체를 할 수 있고 확장 연산자 ...
으로 여분의 항목의 해체를 할 수 있습니다.②.객체 구조에서
const {a, b} = {a: 1, a: 2}
//a = 1, b = 2
이것도 기본적인 대상 구조의 값이다. 그러나 여기서 말하자면 당신은 확장 연산자
...
으로 여분의 항목을 해체할 수 있다.const {a, ...b} = {a: 1, b: 2, c: 3, d: 4}
//a = 1
//b = {b: 2, c: 3, d: 4}
③. 기타 유형
다른 유형을 해체할 때도 먼저 다른 유형의 값을
Array
또는 Object
으로 변환한다const [a, b, c] = 'hello'
// a = 'h', b = 'e', c = 'l'
const {toString: a} = true
toString === Boolean.prototype.toString // true
2. ES6에 대한 함수 기본 매개 변수
①정의
함수 기본 매개 변수는 값이 없거나
undefined
이 전송될 때 기본 참조를 사용할 수 있습니다.밤:function foo (a = 1, b = 2) {
console.log(a, b)
}
foo ()// 1 2
Note: 인삼의 기본값은 undefiend이다. 즉, 기본값이 없을 때 a = undefiend, b = undefined이다.그러나 위의 예는 값이 전달되지 않은 경우
undefiend
이 전달된 경우 다음과 같다.function foo (a = 1, b = 2) {
console.log(a, b)
}
foo (undefined, window.valueIsNotDefined)// 1 2
② 기본값은 함수 매개 변수만 사용할 수 있는 것이 아닙니다
아니면 직접 예를 들면:
var {a = 1, b = 2} = {}
// a = 1, b = 2
var {a = 1, b = 2} = {a: 'hello'}
// a = 'hello', b = 2
사실 부수값을 해체하는 것도 기본값을 부여할 수 있다.이로써 알 수 있다: 함수 매개 변수 기본값의 본질, 또는 해체 할당값
3. 재미있는 밤톨 하나
그렇게 쓸데없는 말을 많이 했는데, 드디어 이 밤송이에 대해 이야기하게 되었다.
Step 1
이것은 매우 흔히 볼 수 있는 상황이다. 어떤 때는 우리가 함수 파라미터를 정의할 때 현재의 파라미터를 해체할 수 있다. 예를 들어 다음과 같다.
function foo ({ a, b }) {
console.log(a, b)
}
foo({ a: 1, b: 2 })// 1 2
Note: 다음을 수행한 것으로 볼 수 있습니다.
const { a, b } = { a: 1, b: 2 };
console.log(a, b)
Step 2
더 많은 경우, 우리는 이것에 만족하지 않을 것이다. 우리는 기본값을 원한다
function foo ({a = 1, b = 2}) {
console.log(a, b)
}
foo({})// 1 2
Note: 다음을 수행한 것으로 볼 수 있습니다.
const { a = 1, b = 2 } = {};
console.log(a, b)
질문 1
그러나 우리가 실제적으로 사용할 때
foo({})
이라는 문법으로 매개 변수의 부족함을 표시하지 않는다. 우리 대다수 사람들은 foo()
이라는 뚜렷한 문법을 사용하기 때문에 문제가 생겼다.function foo ({a = 1, b = 2}) {
console.log(a, b)
}
foo()
Uncaught TypeError: Cannot destructure property `a` of 'undefined' or 'null'.
at foo (:1:14)
at :4:1
쓰기 방식을 바꾸면 오류 원인을 발견하기 어렵지 않다.
const {a = 1, b = 2} = undefined // Error
해결 방법:
사실,
function foo ({a = 1, b = 2}) {}
은 첫 번째 매개 변수에 대한 해구이다. 그러면 우리는 문장 앞의 함수 기본 매개 변수에 따라 undefined
또는
을 정의할 때 미리 정의한다.function foo ({a, b} = {a: 1, b: 2}) {
console.log(a, b)
}
foo()// 1 2
분석: 다음과 같은 문법으로 볼 수 있다
function foo (temp = {a: 1, b: 2}) {
var {a, b} = temp
console.log(a, b)
}
foo()// 1 2
질문 2
위의 방법은 문제가 해결된 것처럼 보이지만 다시
foo({})
을 실행하면 오류가 발생합니다.function foo ({a, b} = {a: 1, b: 2}) {
console.log(a, b)
}
foo({}) // undefined undefined
앞의 상황을 분석한 후에 현재는 알 수 있다. 이때의 함수 매개 변수는 유효한 값을 전달했기 때문에
temp
은 기본값을 채택하지 않고 유효한 값을 채택한다. {}
;var { a, b } = {}
의 해체는 자연스럽게 a
과 b
을 undefined
으로 변화시킨다해결 방법:
우리는 자연스럽게
var { a = 1, b = 2 } = {}
의 형식으로 이런 상황을 해결할 수 있다고 생각했다. 그래서 원함수는 다음과 같이 썼다.function foo ({ a = 1, b = 2 } = {}) {
console.log(a, b)
}
foo()// 1 2
foo({})//1 2
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
당신을 더 나은 프로그래머로 만들어 줄 수 있는 8가지 자바스크립트 트릭자바스크립트 코드를 최적화하는 방법에는 여러가지가 있습니다. 기사에선 작업시 자주 사용하는 8가지 javascript tricks을 요약해서 알려드립니다. 이런 방식은 고전적인 최적화 방식이고 우리는 'MAP'을 사...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.