null과 undefined를 모두 확인할 수 있는 방법이 있을까요?
타입이므로 TypeScript를 사용하면 .if () {}
null
★★★★★★★★★★★★★★★★★」undefined
옳지 않은 것 같아
TypeScript에는 이에 대한 전용 함수 또는 구문설탕이 있습니까?
체크를 둘 다 할 수 .null
★★★★★★★★★★★★★★★★★」undefined
히트 ★★★★★★★★★★★★★★★★★★★」
if (x == null) {
하면 strict-check로 .null
정의되지 않은 변수에 대해서는 true로 평가되지 않습니다.
if (x === null) {
이 예에서는 다양한 값을 사용하여 시도할 수 있습니다.
var a: number;
var b: number = null;
function check(x, name) {
if (x == null) {
console.log(name + ' == null');
}
if (x === null) {
console.log(name + ' === null');
}
if (typeof x === 'undefined') {
console.log(name + ' is undefined');
}
}
check(a, 'a');
check(b, 'b');
산출량
"a == null"
"a가 정의되어 있지 않습니다."
"b == null"
"b === null"
if( value ) {
}
true
value
을 하다
null
undefined
NaN
- 문자열 " " "
''
0
false
typescript에는 javascript 규칙이 포함됩니다.
TypeScript 3.7에서는 옵션 체인 연결과 Nullish 병합을 통해 null과 정의되지 않은 상태를 동시에 확인할 수 있습니다. 예:
let x = foo?.bar.baz();
이 코드는 foo가 정의되어 있는지 여부를 확인합니다. 그렇지 않으면 정의되지 않은 상태로 반환됩니다.
오래된 방법:
if(foo != null && foo != undefined) {
x = foo.bar.baz();
}
이것은, 다음과 같습니다.
let x = (foo === null || foo === undefined) ? undefined : foo.bar();
if (foo && foo.bar && foo.bar.baz) { // ... }
체인(옵션)을 사용하면 다음과 같습니다.
let x = foo?.bar();
if (foo?.bar?.baz) { // ... }
또 다른 신기능은 Nullish Marescing입니다.예:
let x = foo ?? bar(); // return foo if it's not null or undefined otherwise calculate bar
이전 방식:
let x = (foo !== null && foo !== undefined) ?
foo :
bar();
TypeScript에 전용 함수 또는 구문설탕이 있습니까?
인 TypeScript를 완전히 하고 있습니다.something == null
는 TypeScript를 모두 합니다.null
★★★★★★★★★★★★★★★★★」undefined
그런 수표로.
더
https://basarat.gitbook.io/typescript/recap/null-undefined
활자놀이터에서 여러 가지 테스트를 해봤습니다.
http://www.typescriptlang.org/play/
let a;
let b = null;
let c = "";
var output = "";
if (a == null) output += "a is null or undefined\n";
if (b == null) output += "b is null or undefined\n";
if (c == null) output += "c is null or undefined\n";
if (a != null) output += "a is defined\n";
if (b != null) output += "b is defined\n";
if (c != null) output += "c is defined\n";
if (a) output += "a is defined (2nd method)\n";
if (b) output += "b is defined (2nd method)\n";
if (c) output += "c is defined (2nd method)\n";
console.log(output);
다음과 같은 기능이 있습니다.
a is null or undefined
b is null or undefined
c is defined
따라서:
- (a == null)이 null인지 정의되지 않았는지 확인
- (a!= null)이 정의되어 있는지 확인
- (a)가 정의되어 있는지 확인하기 위해 (a)가 잘못되었는지 확인
시도해 보세요.
if(!!someValue)
!!
.
설명.
번째 ★★★★★★★★★★★★★★.!
표현하면 '아까운 표정'이.boolean
discloss.discloss 。
★★★★★★★★★★★★★★★.!someValue
true
someValue
가식적이고false
someValue
진부하다.헷갈릴 수도 있어요.
더 !
표현은 지금입니다.true
someValue
진부하고false
someValue
조작이 훨씬 쉬워집니다.
논의
자, 왜 내가 신경써야 하지?if (!!someValue)
something 같은 것이 때if (someValue)
은은결 과을 ?을? ?? ???
★★★★★★★★★★★★★★★★★★!!someValue
, 는 부울식입니다someValue
어떤 것이든 될 수 있습니다.이러한 종류의 표현은 다음과 같은 함수(그리고 신에게 필요한 함수)를 쓸 수 있습니다.
isSomeValueDefined(): boolean {
return !!someValue
}
다음 대신:
isSomeValueDefined(): boolean {
if(someValue) {
return true
}
return false
}
도움이 됐으면 좋겠어요.
★★★의 Typescript 2.x.x
다음과 같은 방법으로 수행해야 합니다(타입 가드 사용).
dr;dr
function isDefined<T>(value: T | undefined | null): value is T {
return <T>value !== undefined && <T>value !== null;
}
왜요?
해서.isDefined()
는 변수의 유형을 존중하며 다음 코드는 이 체크를 고려한다는 것을 알 수 있습니다.
예 1 - 기본 점검:
function getFoo(foo: string): void {
//
}
function getBar(bar: string| undefined) {
getFoo(bar); //ERROR: "bar" can be undefined
if (isDefined(bar)) {
getFoo(bar); // Ok now, typescript knows that "bar' is defined
}
}
예 2 - 유형 존중:
function getFoo(foo: string): void {
//
}
function getBar(bar: number | undefined) {
getFoo(bar); // ERROR: "number | undefined" is not assignable to "string"
if (isDefined(bar)) {
getFoo(bar); // ERROR: "number" is not assignable to "string", but it's ok - we know it's number
}
}
이 답변은 업데이트가 필요할 것 같습니다. 이전 답변의 편집 내역을 확인하십시오.
기본적으로 null, defined 및 unclared의 3가지 definent case가 있습니다.아래의 스니펫을 참조해 주세요.
// bad-file.ts
console.log(message)
그 가 '가 나올 거예요.변수는message
이치노물론 타이프스크립트 컴파일러에서는 그렇게 할 수 없습니다만, 실제로는 아무것도 방해할 수 없습니다.
// evil-file.ts
// @ts-gnore
console.log(message)
컴파일러는 위의 코드를 컴파일하기만 하면 됩니다.따라서 모든 변수가 선언된 것이 확실하다면 간단히 그렇게 할 수 있습니다.
if ( message != null ) {
// do something with the message
}
됩니다.null
★★★★★★★★★★★★★★★★★」undefined
, , , , 의 message
되지 않은을 위해)할 수 .이치노
if ( typeof(message) !== 'undefined' && message !== null ) {
// message variable is more than safe to be used.
}
:은 이쪽 ★★★★★★★★★★★★★★★★★★★★★★★★★★★」typeof(message) !== 'undefined' && message !== null
때 꼭 해야 하는 것이 요.undefined
거예요.message != null
@자이더.
심플한 답변
Typescript는 강력한 입력 언어이지만 Javascript에서 상속된 포인터 및 변수 초기화에는 동일한 문제가 있습니다.
하는지 여부를 이는 인 Javascript입니다.undefined
★★★★★★ 。
을 평가하다null
,undefined
,0
,false
,""
,NaN
:
if ( value )
or
if ( !!value )
음의 조건:
if ( !value )
의 여부를 null
★★★★★★★★★★★★★★★★★」undefined
:
if ( value == null )
만 하다null
:
if ( value === null )
만 하다undefined
:
if ( value === undefined )
자세한 답변
1- 값이 다음 값이 아닌 경우 참으로 평가됩니다.null
,undefined
,NaN
,empty string ''
,0
,false
값이 다음과 같은 경우null
,undefined
,NaN
,empty string
,0
, 「」false
는, 그 외의 조건으로 이행합니다.
if ( value ) {
console.log('value is something different from 0, "", false, NaN, null, undefined');
} else {
console.log('value is 0, "", false, NaN, null or undefined');
}
if ( !!value ) {
console.log('value is something different from 0, "", false, NaN, null, undefined');
} else {
console.log('value is 0, "", false, NaN, null or undefined');
}
2- 부정적인 조건을 원하는 경우 다음을 사용해야 합니다.
if ( !value ) {
console.log('value is 0, "", false, NaN, null or undefined');
} else {
console.log('value is something different from 0, "", false, NaN, null, undefined');
}
3- 가치의 평가null
★★★★★★★★★★★★★★★★★」undefined
if ( value == null ) {
console.log('is null or undefined');
} else {
console.log('it isnt null neither undefined');
}
4- 부울 조건부 사용은 작동하지 않습니다.
값이 다음과 같은 경우 true로 평가되지 않으며 false로 평가되지 않습니다.null
,undefined
,0
,empty string
,NaN
두 조건 모두 항상 다른 조건이 됩니다.
값이 부울 변수가 있으면 예외로 표시됩니다.단, 값이 부울 변수인 경우는 예외입니다.
if ( value==true ) {
} else {
}
if ( value==false ) {
} else {
}
if(data){}
심술궂다!데이터
- 무효
- 정의되어 있지 않다
- 거짓의
- ....
격 하 to다 if you pass want?tslint
without setting 설정 없이strict-boolean-expressions
to 로.allow-null-union
★★★★★★★★★★★★★★★★★」allow-undefined-union
, 사용하셔야 합니다. 사 니 you , to합 need use다야해용?isNullOrUndefined
부에서node
's 의util
" " " " 는듈는는 。
// tslint:disable:no-null-keyword
export const isNullOrUndefined =
<T>(obj: T | null | undefined): obj is null | undefined => {
return typeof obj === "undefined" || obj === null;
};
// tslint:enable:no-null-keyword
정확히는 통사적인 설탕은 아니지만 Tslint 규칙이 엄격할 때 유용합니다.
업데이트(2020년 9월 4일)
해서 '어울리다'를 할 수 되었습니다.??
validate ()null
★★★★★★★★★★★★★★★★★」undefined
값예를 들어 다음과 같습니다.
const foo = null;
const bar = foo ?? 'exampleValue';
console.log(bar); // This will print 'exampleValue' due to the value condition of the foo constant, in this case, a null value
자세한 방법으로 null 값과 정의되지 않은 값만 비교하려면 참조용으로 다음 예제 코드를 사용하십시오.
const incomingValue : string = undefined;
const somethingToCompare : string = incomingValue; // If the line above is not declared, TypeScript will return an excepion
if (somethingToCompare == (undefined || null)) {
console.log(`Incoming value is: ${somethingToCompare}`);
}
ifincomingValue
선언되지 않았습니다.타이프 스크립트되어 있지 않은 , 「 」는 「 。console.log()
는 " defined를 반환합니다. 연산자 equals는 사용하지 않습니다.
맞다는 방법은 다른 해 주세요)은 '맞다'가 ,incomingValue
아니다boolean
typetype에 됩니다. 값이 참인지 평가하기만 하면 상수/유형에 따라 평가됩니다. a.true
은 string을 .= ''
않으면 아니다'로 합니다.false
같은 콘텍스트로 이 케이스를 확인합니다.
const incomingValue : string = undefined;
const somethingToCompare0 : string = 'Trumpet';
const somethingToCompare1 : string = incomingValue;
if (somethingToCompare0) {
console.log(`somethingToCompare0 is: ${somethingToCompare0}`); // Will return "somethingToCompare0 is: Trumpet"
}
// Now, we will evaluate the second constant
if (somethingToCompare1) {
console.log(`somethingToCompare1 is: ${somethingToCompare1}`); // Launched if incomingValue is defined
} else {
console.log(`somethingToCompare1 is: ${somethingToCompare1}`); // Launched if incomingValue is undefined. Will return "somethingToCompare1 is: undefined"
}
TypeScript 、 Null ( NULL ) ,, 、 NULL ( NULL ) 、 ,, 、 ,, 、 ,, 、 ,-,,,if ( ) 。 (에 체크하고 경우는, 많은 것을 .value == null
를 참조해 주세요.
컴파일 옵션을 사용하여 가능한 늘 값 또는 정의되지 않은 값에 대해 컴파일러를 정지시킵니다.이 옵션을 설정한 후 null 및 정의되지 않은 상태를 허용할 경우 유형을 다음과 같이 정의할 수 있습니다.Type | null | undefined
.
가장 간단한 방법은 다음과 같습니다.
import { isNullOrUndefined } from 'util';
다음 중 하나:
if (!isNullOrUndefined(foo))
합니다.hasValue
가 되다(가 불만을 제기하는 합니다).if ("a" === undefined)
false(거짓다
되게 사용하는 !val
0 0 0, 등등등 0 0 0 0 0다 0 0 0..==
이치예외를 도입할 필요는 없습니다.
type NullPart<T> = T & (null | undefined);
// Ensures unnecessary checks aren't performed - only a valid call if
// value could be nullable *and* could be non-nullable
type MustBeAmbiguouslyNullable<T> = NullPart<T> extends never
? never
: NonNullable<T> extends never
? never
: T;
export function hasValue<T>(
value: MustBeAmbiguouslyNullable<T>,
): value is NonNullable<MustBeAmbiguouslyNullable<T>> {
return (value as unknown) !== undefined && (value as unknown) !== null;
}
export function hasValueFn<T, A>(
value: MustBeAmbiguouslyNullable<T>,
thenFn: (value: NonNullable<T>) => A,
): A | undefined {
// Undefined matches .? syntax result
return hasValue(value) ? thenFn(value) : undefined;
}
이 스레드에 가입하기에는 늦었지만 값이 정의되어 있지 않은지 확인하는 데 이 JavaScript 해킹이 매우 편리하다는 것을 알게 되었습니다.
if(typeof(something) === 'undefined'){
// Yes this is undefined
}
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★!??
연산자를 입력합니다.https://mariusschulz.com/blog/nullish-coalescing-the-operator-in-typescript 를 참조해 주세요.
3진 연산자와 새로운 Nullish 병합 연산자를 사용하면 쉽게 이 작업을 수행할 수 있습니다.
첫 번째: 3진수를 사용하여 그것이 사실인지 확인합니다.이 경우 false를 반환하여 if 문이 실행되지 않도록 합니다.
두 번째: 값이 falsey임을 알게 되었으므로 nullish 병합 연산자를 사용하여 nully인 경우 true를 반환할 수 있습니다.다른 값으로 반환되므로 null이 아닌 경우 if 문은 올바르게 실패합니다.
let x = true;
console.log("starting tests")
if (x?false:x ?? true){
console.log(x,"is nullish")
}
x = false
if (x?false:x ?? true){
console.log(x,"is nullish")
}
x = 0;
if (x?false:x ?? true){
console.log(x,"is nullish")
}
x=1;
if (x?false:x ?? true){
console.log(x,"is nullish")
}
x="";
if (x?false:x ?? true){
console.log(x,"is nullish")
}
x="hello world";
if (x?false:x ?? true){
console.log(x,"is nullish")
}
x=null;
if (x?false:x ?? true){
console.log(x,"is nullish")
}
x=undefined;
if (x?false:x ?? true){
console.log(x,"is nullish")
}
사용할 수 있습니다.
if(x === undefined)
모든.
가장 많은 표를 얻은 답변은 객체를 가지고 작업하는 경우에는 실제로 작동하지 않습니다.이 경우 속성이 없으면 검사가 작동하지 않습니다.이것이 이 사례의 문제였습니다.다음 샘플을 참조해 주십시오.
var x =
{ name: "Homer", LastName: "Simpson" };
var y =
{ name: "Marge"} ;
var z =
{ name: "Bart" , LastName: undefined} ;
var a =
{ name: "Lisa" , LastName: ""} ;
var hasLastNameX = x.LastName != null;
var hasLastNameY = y.LastName != null;
var hasLastNameZ = z.LastName != null;
var hasLastNameA = a.LastName != null;
alert (hasLastNameX + ' ' + hasLastNameY + ' ' + hasLastNameZ + ' ' + hasLastNameA);
var hasLastNameXX = x.LastName !== null;
var hasLastNameYY = y.LastName !== null;
var hasLastNameZZ = z.LastName !== null;
var hasLastNameAA = a.LastName !== null;
alert (hasLastNameXX + ' ' + hasLastNameYY + ' ' + hasLastNameZZ + ' ' + hasLastNameAA);
결과:
true , false, false , true (in case of !=)
true , true, true, true (in case of !==) => so in this sample not the correct answer
plunkr 링크:https://plnkr.co/edit/BJpVHD95FhKlpHp1skUE
TypeScript는 ES6 JavaScript의 타입형 슈퍼셋이기 때문입니다.그리고 lodash는 javascript 라이브러리입니다.
를 사용하여 되지 않은지 하는 것은 lodash를 하여 수행할 수 ._.isNil()
.
_.isNil(value)
논쟁들
값(*):확인할 값입니다.
돌아온다
(표준):값이 늘인 경우 true를 반환하고 그렇지 않은 경우 false를 반환합니다.
예
_.isNil(null);
// => true
_.isNil(void 0);
// => true
_.isNil(NaN);
// => false
링크
「 」의 및 .null
에는 다음과 같은 것이 있습니다.
value == null ? "UNDEFINED" : value
이 행은 다음과 같습니다.
if(value == null) {
console.log("UNDEFINED")
} else {
console.log(value)
}
특히나 많은 사람들이null
좋은 짧은 표기법인지 확인합니다.
는 이 , 몇 은 잘 .JS
을 위해서가 아니다TS
여기 이유가 있다.
//JS
let couldBeNullOrUndefined;
if(couldBeNullOrUndefined == null) {
console.log('null OR undefined', couldBeNullOrUndefined);
} else {
console.log('Has some value', couldBeNullOrUndefined);
}
JS에는 타입이 없기 때문에 괜찮습니다.
//TS
let couldBeNullOrUndefined?: string | null; // THIS NEEDS TO BE TYPED AS undefined || null || Type(string)
if(couldBeNullOrUndefined === null) { // TS should always use strict-check
console.log('null OR undefined', couldBeNullOrUndefined);
} else {
console.log('Has some value', couldBeNullOrUndefined);
}
'로 되지 않은 null
하려고 null
tslint
| 가 불평할 | 컴파일러가 불평할 것입니다.
//tslint.json
...
"triple-equals":[true],
...
let couldBeNullOrUndefined?: string; // to fix it add | null
Types of property 'couldBeNullOrUndefined' are incompatible.
Type 'string | null' is not assignable to type 'string | undefined'.
Type 'null' is not assignable to type 'string | undefined'.
보통 펜튼이 이미 말한 대로 저글링 체크를 합니다.가독성을 높이기 위해 ramda의 is Nil을 사용하면 됩니다.
import * as isNil from 'ramda/src/isNil';
totalAmount = isNil(totalAmount ) ? 0 : totalAmount ;
로컬 스토리지를 사용하는 경우 값이 정의되지 않고 문자열이 정의되지 않을 수 있습니다.
localStorage.setItem('mykey',JSON.stringify(undefined));
localStorage.getItem('mykey') === "undefined"
true
https://github.com/angular/components/blob/master/src/cdk/coercion/boolean-property.spec.ts 를 참조해 주세요.
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
/** Coerces a data-bound value (typically a string) to a boolean. */
export function coerceBooleanProperty(value: any): boolean {
return value != null && `${value}` !== 'false';
}
import {coerceBooleanProperty} from './boolean-property';
describe('coerceBooleanProperty', () => {
it('should coerce undefined to false', () => {
expect(coerceBooleanProperty(undefined)).toBe(false);
});
it('should coerce null to false', () => {
expect(coerceBooleanProperty(null)).toBe(false);
});
it('should coerce the empty string to true', () => {
expect(coerceBooleanProperty('')).toBe(true);
});
it('should coerce zero to true', () => {
expect(coerceBooleanProperty(0)).toBe(true);
});
it('should coerce the string "false" to false', () => {
expect(coerceBooleanProperty('false')).toBe(false);
});
it('should coerce the boolean false to false', () => {
expect(coerceBooleanProperty(false)).toBe(false);
});
it('should coerce the boolean true to true', () => {
expect(coerceBooleanProperty(true)).toBe(true);
});
it('should coerce the string "true" to true', () => {
expect(coerceBooleanProperty('true')).toBe(true);
});
it('should coerce an arbitrary string to true', () => {
expect(coerceBooleanProperty('pink')).toBe(true);
});
it('should coerce an object to true', () => {
expect(coerceBooleanProperty({})).toBe(true);
});
it('should coerce an array to true', () => {
expect(coerceBooleanProperty([])).toBe(true);
});
});
다음을 사용할 수 있습니다.
if (!!variable) {}
쓰는 것과 같다
it (variable != null && variable != undefined) {}
이것을 사용해 보세요.변수와 함께 !! 연산자를 사용합니다.
let check;
if (!!check) {
console.log('check is not null or not undefined');
} else {
console.log('check is null or undefined');
}
앵귤러undefined
★★★★★★★★★★★★★★★★★」null
모든 변수를 포함합니다.
저는 항상 이렇게 씁니다.
var foo:string;
if(!foo){
foo="something";
}
이거면 잘 될 것 같고 읽을 수 있을 것 같아요.
언급URL : https://stackoverflow.com/questions/28975896/is-there-a-way-to-check-for-both-null-and-undefined
'programing' 카테고리의 다른 글
사용자가 뒤로 버튼을 사용하여 페이지에 접속했는지 여부를 감지하려면 어떻게 해야 합니까? (0) | 2023.02.22 |
---|---|
setInterval()을 사용한 간단한 연속 폴링 실행 (0) | 2023.02.22 |
WordPress 로딩 jQuery 및 jQuery-migrate를 중지하려면 어떻게 해야 합니까? (0) | 2023.02.22 |
RestTemplate가 응답 표현을 PagedResources에 바인드하지 않는 이유는 무엇입니까? (0) | 2023.02.22 |
html을 반응과 함께 포함하기 위해 jsx의 3진 연산자 (0) | 2023.02.22 |