거기 null
ES6 (ES2015 / JavaScript.next / 하모니) 등의 -safe 속성 액세스 (null의 전파 / 유) 연산자 ?.
의 커피 스크립트 예는? 아니면 ES7을 계획하고 있습니까?
var aThing = getSomething()
...
aThing = possiblyNull?.thing
이것은 대략 다음과 같습니다.
if (possiblyNull != null) aThing = possiblyNull.thing
이상적 솔루션 (심지어 할당해서는 안됩니다 undefined
)로 aThing
하면 possiblyNull
ISnull
답변
업데이트 (2020-01-31) : 사람들이 여전히 이것을 찾는 것 같습니다. 현재 이야기는 다음과 같습니다.
- 선택적 체인 사양 (4 단계) : https://github.com/tc39/proposal-optional-chaining
- babel-preset-env : 이것은 아마도 당신이 원하는 것입니다 https://babeljs.io/docs/en/babel-preset-env
- 바벨 v7 플러그인 : https://babeljs.io/docs/en/babel-plugin-proposal-optional-chaining
업데이트 (2017-08-01) : 공식 플러그인을 사용하려면 새로운 변형으로 Babel 7의 알파 빌드를 시도 할 수 있습니다. 귀하의 마일리지가 다를 수 있습니다
https://www.npmjs.com/package/babel-plugin-transform-optional-chaining
실물 :
현재 1 단계에있는 기능 : 옵션 체인.
https://github.com/tc39/proposal-optional-chaining
오늘 사용하고 싶다면 그것을 수행하는 Babel 플러그인이 있습니다.
https://github.com/davidyaha/ecmascript-optionals-proposal
답변
?만큼 좋지 않습니다. 연산자이지만 비슷한 결과를 얻으려면 다음을 수행하십시오.
user && user.address && user.address.postcode
null
및 undefined
둘 다 잘못된 값 이므로 ( 이 참조 참조 ) &&
선행 연산자가 null이거나 정의되지 않은 경우에만 연산자 뒤의 속성에 액세스합니다.
또는 다음과 같은 함수를 작성할 수 있습니다.
function _try(func, fallbackValue) {
try {
var value = func();
return (value === null || value === undefined) ? fallbackValue : value;
} catch (e) {
return fallbackValue;
}
}
용법:
_try(() => user.address.postcode) // return postcode or undefined
또는 대체 값으로 :
_try(() => user.address.postcode, "none") // return postcode or a custom string
답변
아니요 . JavaScript에서 lodash # get 또는 이와 유사한 것을 사용할 수 있습니다 .
답변
안전한 자산 접근을위한 바닐라 대안
(((a.b || {}).c || {}).d || {}).e
가장 간결한 조건부 할당은 아마도
try { b = a.b.c.d.e } catch(e) {}
답변
아니요, ES6에는 null 전파 연산자가 없습니다. 알려진 패턴 중 하나를 사용해야합니다. 합니다.
하지만 다음과 같은 구조 조정을 사용할 수 있습니다.
({thing: aThing} = possiblyNull);
ES7에서 그러한 연산자를 추가하기위한 많은 토론 (예 : this ) 이 있지만 실제로 이륙 한 사람은 없습니다.
답변
여기 의 목록으로 이동하면 현재 Ecmascript에 안전한 순회를 추가 할 제안이 없습니다. 따라서이를 수행 할 수있는 좋은 방법은 없을뿐만 아니라 미래에도 추가되지는 않을 것입니다.
답변
// Typescript
static nullsafe<T, R>(instance: T, func: (T) => R): R {
return func(instance)
}
// Javascript
function nullsafe(instance, func) {
return func(instance);
};
// use like this
const instance = getSomething();
let thing = nullsafe(instance, t => t.thing0.thing1.thingx);