선택적 연결 - 자바 스크립트에서 더 안전한 null
13461 단어 ecmascriptjavascriptdeves2020
선택적 연결 - 자바 스크립트에서 더 안전한 null
섭 독자!
ES2020에 대해 들어본 적이 있을 것입니다. 예, 이것은 Optional Chaining
라는 새로운 기능과 함께 제공되는 새 버전의 Javascript입니다!
Javascript에서 subprops의 존재를 보장하려면 두 가지 기본 방법을 사용할 수 있습니다.
// By return at each verification
if (!data) {
return
}
if (!data.user) {
return
}
if (!data.user.name) {
return
}
console.log('The name is:' + data.user.name)
// The name is Will
// By return at complete verification
if (!data|| !data.user || !data.user.name) {
return
}
console.log('The name is:' + data.user.name)
// The name is Will
또는
const name = data && data.user && data.user.name
console.log('The name is:' + name)
// The name is Will || The name is undefined
아마도 두 번째 예가 명확해 보일 수 있습니다.
하지만... 대체를 적용해야 하는 경우에는 어떻게 합니까?
const name = data && data.user && data.user.name || 'William Godoy'
console.log('The name is:' + name)
// The name is Will || The name is William Godoy
좋아... 좋아...
충분한? 당연히 아니지!
이것은 Optional Chaining
가 우리를 구하기 위해 오는 곳입니다.
const name = data && data.user && data.user.name
// turns to
const name = data?.user?.name
console.log('The name is:' + name)
// The name is Will || The name is undefined
놀라운 어?
하지만 다음과 같은 질문이 있을 수 있습니다. "대체를 추가하려면 같은 방식으로 해야 하나요?"
두 가지 대답이 있습니다: 예와 아니오
설명하겠습니다. 이전 방법이 작동합니다.
const name = data?.user?.name || 'William Godoy'
console.log('The name is:' + name)
// The name is Will || The name is William Godoy
하지만 선호:
const name = data?.user?.name ?? 'William Godoy'
console.log('The name is:' + name)
EcmaScript 문서가 이것을 제안하기 때문이 아니라 가독성을 위해!
지금까지 멋진?
요약하자면?
const data = {
user: {
name: 'Will',
age: 24
},
status: 200
}
// Old way
const name = data && data.user && data.user.name || 'William'
// Will
// New way
const name = data?.user?.name || 'William'
// Will
예, 기능을 연결하는 데 사용할 수 있습니다.
const options = {
api: {
getData () {
},
// ...
},
// ...
}
options?.api?.getData()
그리고 가능한 콜백과 함께 사용:
function dbDeleteWithoutWhere(callback) {
// Do stuffs ...
if (callback) {
callback()
}
}
// OR
function dbDeleteWithoutWhere(callback) {
// Do stuffs ...
callback && callback()
}
// New Way
function dbDeleteWithoutWhere(callback) {
// Do stuffs ...
callback?.()
}
위에서 볼 수 있듯이 호출되는 콜백이 없으면 오류가 발생하지 않습니다.
// No errors after being invoked
dbDeleteWithoutWhere(undefined)
// No errors after being invoked
dbDeleteWithoutWhere(function callback() {
// Do callback stuffs
})
함수와 마찬가지로 배열로 시도할 수 있습니다.
const numbers = {
integers: [1, 2, 3, 4, 5],
floats: [1.1, 2.1, 31.9, 45.2]
}
// Old way
const firstInteger = numbers && numbers.integers && numbers.integers[0]
// 1 || undefined
// New way
const firstInteger = numbers?.integers?.[0]
// 1 || undefined
옵션 체인은 가독성, 청결함을 용이하게 하고 정리를 돕기 위해 왔습니다!
여기까지 읽어주셔서 감사합니다!
건배
Reference
이 문제에 관하여(선택적 연결 - 자바 스크립트에서 더 안전한 null), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/rap0so/optional-chaining-9ao
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// By return at each verification
if (!data) {
return
}
if (!data.user) {
return
}
if (!data.user.name) {
return
}
console.log('The name is:' + data.user.name)
// The name is Will
// By return at complete verification
if (!data|| !data.user || !data.user.name) {
return
}
console.log('The name is:' + data.user.name)
// The name is Will
const name = data && data.user && data.user.name
console.log('The name is:' + name)
// The name is Will || The name is undefined
const name = data && data.user && data.user.name || 'William Godoy'
console.log('The name is:' + name)
// The name is Will || The name is William Godoy
const name = data && data.user && data.user.name
// turns to
const name = data?.user?.name
console.log('The name is:' + name)
// The name is Will || The name is undefined
const name = data?.user?.name || 'William Godoy'
console.log('The name is:' + name)
// The name is Will || The name is William Godoy
const name = data?.user?.name ?? 'William Godoy'
console.log('The name is:' + name)
const data = {
user: {
name: 'Will',
age: 24
},
status: 200
}
// Old way
const name = data && data.user && data.user.name || 'William'
// Will
// New way
const name = data?.user?.name || 'William'
// Will
const options = {
api: {
getData () {
},
// ...
},
// ...
}
options?.api?.getData()
function dbDeleteWithoutWhere(callback) {
// Do stuffs ...
if (callback) {
callback()
}
}
// OR
function dbDeleteWithoutWhere(callback) {
// Do stuffs ...
callback && callback()
}
// New Way
function dbDeleteWithoutWhere(callback) {
// Do stuffs ...
callback?.()
}
// No errors after being invoked
dbDeleteWithoutWhere(undefined)
// No errors after being invoked
dbDeleteWithoutWhere(function callback() {
// Do callback stuffs
})
const numbers = {
integers: [1, 2, 3, 4, 5],
floats: [1.1, 2.1, 31.9, 45.2]
}
// Old way
const firstInteger = numbers && numbers.integers && numbers.integers[0]
// 1 || undefined
// New way
const firstInteger = numbers?.integers?.[0]
// 1 || undefined
Reference
이 문제에 관하여(선택적 연결 - 자바 스크립트에서 더 안전한 null), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rap0so/optional-chaining-9ao텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)