programing

null과 undefined를 모두 확인할 수 있는 방법이 있을까요?

powerit 2023. 2. 22. 23:18
반응형

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 ) {
}

truevalue을 하다

  • 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)

!!.

설명.

번째 ★★★★★★★★★★★★★★.! 표현하면 '아까운 표정'이.booleandiscloss.discloss 。

★★★★★★★★★★★★★★★.!someValuetruesomeValue가식적이고falsesomeValue진부하다.헷갈릴 수도 있어요.

!표현은 지금입니다.truesomeValue진부하고falsesomeValue조작이 훨씬 쉬워집니다.

논의

자, 왜 내가 신경써야 하지?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"
}

TypeScriptNull NULL ) ,, 、 NULL NULL ) 、 ,, 、 ,, 、 ,, 、 ,-,,,if ) 。 (에 체크하고 경우는, 많은 것을 .value == null를 참조해 주세요.

컴파일 옵션을 사용하여 가능한 늘 값 또는 정의되지 않은 값에 대해 컴파일러를 정지시킵니다.이 옵션을 설정한 후 null 및 정의되지 않은 상태를 허용할 경우 유형을 다음과 같이 정의할 수 있습니다.Type | null | undefined.

가장 간단한 방법은 다음과 같습니다.

import { isNullOrUndefined } from 'util';

다음 중 하나:

if (!isNullOrUndefined(foo))

합니다.hasValue되다(불만을 제기하는 합니다).if ("a" === undefined)false(거짓다

되게 사용하는 !val0 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

링크

Lodash 문서

「 」의 및 .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하려고 nulltslint| 가 불평할 | 컴파일러가 불평할 것입니다.

//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

반응형