programing

JavaScript에서 정의되지 않은 경우 변수 설정

kingscode 2022. 10. 29. 11:54
반응형

JavaScript에서 정의되지 않은 경우 변수 설정

JavaScript 변수를 테스트하고 정의하면 됩니다.undefined하지만, 어떤 식으로든

var setVariable = localStorage.getItem('value') || 0;

훨씬 더 명확한 방법인 것 같기도 하고 다른 언어에서도 본 적이 있을 것 같아요.

네, 그렇게 할 수 있습니다.단, 엄밀하게 말하면 취득한 값이 false일 경우 실제로는 정의되지 않은 값이 아니라 기본값을 할당합니다.따라서 이는 단순히 일치할 뿐만 아니라undefined하지만 또한null,false,0,NaN,""(, 아닙니다) "0").

변수가 엄밀하게 지정된 경우에만 기본값으로 설정하려는 경우undefined가장 안전한 방법은 다음과 같습니다.

var x = (typeof x === 'undefined') ? your_default_value : x;

최신 브라우저에서는 실제로 다음과 같이 작성해도 안전합니다.

var x = (x === undefined) ? your_default_value : x;

단, 이전 브라우저에서는 이를 뒤집을 수 있습니다.이 브라우저에서는 변수 선언이 허가되어 있습니다.undefined값이 정의되어 있기 때문에 테스트가 실패합니다.

논리적인 특수한 할당, ES2020+ 솔루션

현재 새로운 연산자가 브라우저에 추가되고 있습니다.??=,||=,그리고.&&=이 투고에서는,??=.

왼쪽이 다음 상태인지 확인합니다.undefined또는null(이미 정의되어 있는 경우)를 참조해 주세요.그렇지 않으면 오른쪽이 왼쪽 변수에 할당됩니다.

메서드 비교

// Using ??=
name ??= "Dave"

// Previously, ES2020
name = name ?? "Dave"

// or
if (typeof name === "undefined" || name === null) {
    name = true
}

// Before that (not equivalent, but commonly used)
name = name || "Dave" // Now: name ||= "Dave"

기본적인 예

let a       // undefined
let b = null
let c = false

a ??= true  // true
b ??= true  // true
c ??= true  // false

오브젝트/어레이 예시

let x = ["foo"]
let y = { foo: "fizz" }

x[0] ??= "bar"  // "foo"
x[1] ??= "bar"  // "bar"

y.foo ??= "buzz"  // "fizz"
y.bar ??= "buzz"  // "buzz"

x  // Array [ "foo", "bar" ]
y  // Object { foo: "fizz", bar: "buzz" }

?= 브라우저 지원 2021년 9월 - 90%

?= Mozilla 문서

||= Mozilla 문서

&= Mozilla 문서

2018년 ES6의 답변은 다음과 같습니다.

return Object.is(x, undefined) ? y : x;

변수 x가 정의되지 않은 경우 변수 y...를 반환합니다.그렇지 않으면 변수 x가 정의되어 있으면 변수 x를 반환합니다.

ES2020의 답변

Nullish Margesing 연산자를 사용하면 다음과 같이 기본값을 설정할 수 있습니다.valuenull 또는 정의되지 않았습니다.

const setVariable = localStorage.getItem('value') ?? 0;

단, nullish mergeing 연산자는 다음과 같은 다른 유형의 false 값에는 기본값을 반환하지 않습니다.0그리고.''.

, 브라우저 지원에 유의하십시오.Babel과 같은 JavaScript 컴파일러를 사용하여 하위 호환성으로 변환해야 할 수 있습니다.Node.js를 사용하는 경우 버전 14부터 지원됩니다.

여러 곳에서 "정의되지 않은 경우 변수 설정"이 필요했습니다.@Alnitak answer를 사용하여 함수를 만들었습니다.도움이 됐으면 좋겠네요

function setDefaultVal(value, defaultValue){
   return (value === undefined) ? defaultValue : value;
}  

사용방법:

hasPoints = setDefaultVal(this.hasPoints, true);

체크하는 것이 더 논리적인 것 같다.typeof대신undefined? var를 설정할 때 숫자를 예상할 수 있습니다.0"CHANGE: " "CHANGE: "CHANGE:

var getVariable = localStorage.getItem('value');
var setVariable = (typeof getVariable == 'number') ? getVariable : 0;

, 「 」의 경우는,getVariable anything)가 은 "(string, object, anything)"으로 되어 있습니다.0

오늘날에는 JS를 통해 실제로 접근 방식을 수행할 수 있습니다.

// Your variable is null
// or '', 0, false, undefined
let x = null;

// Set default value
x = x || 'default value';

console.log(x); // default value

이 예에서는, 다음과 같이 동작합니다.

const setVariable = localStorage.getItem('value') || 0;

다음 방법 중 하나를 사용할 수 있습니다.

let x;
let y = 4;
x || (x = y)

ES12 이후

let x;
let y = 4;
x ||= y;

FP(기능 프로그래밍) 팬이라면 Ramda에는 디폴트라고 불리는 깔끔한 도우미 기능이 있습니다.수신인:

사용방법:

const result = defaultTo(30)(value)

하면 더 합니다.undefined★★★★★★★★★★★★★★★★★★:

const result2 = defaultTo(false)(dashboard.someValue)

var setVariable = (typeof localStorage.getItem('value') !== 'undefined' && localStorage.getItem('value')) || 0;

오늘 이 시나리오에서도 몇 가지 값에 대해 0을 덮어쓰지 않도록 했습니다.이러한 시나리오에서 일반적인 유틸리티 방법이 포함된 파일이 있습니다.시나리오에 대처하고 유연하게 대처하기 위해 추가한 내용은 다음과 같습니다.

function getIfNotSet(value, newValue, overwriteNull, overwriteZero) {
    if (typeof (value) === 'undefined') {
        return newValue;
    } else if (value === null && overwriteNull === true) {
        return newValue;
    } else if (value === 0 && overwriteZero === true) {
        return newValue;
    } else {
        return value;
    }
}

그런 다음 정의되지 않은 값에 대해서만 설정하거나 null 또는 0 값을 덮어쓰려는 경우 마지막 두 매개 변수를 옵션으로 호출할 수 있습니다.ID가 정의되지 않았거나 늘인 경우 ID를 -1로 설정하지만 0 값은 덮어쓰지 않는 호출 예를 다음에 나타냅니다.

data.ID = Util.getIfNotSet(data.ID, -1, true);

디폴트값이 부울값인 경우에도 기능합니다.

var setVariable = ( (b = 0) => b )( localStorage.getItem('value') );

현재 Javascript 구현의 경우

var [result='default']=[possiblyUndefinedValue]

(오브젝트 디컨스트럭션을 사용하여)를 실행하는 것이 좋습니다.

언급URL : https://stackoverflow.com/questions/5409641/set-a-variable-if-undefined-in-javascript

반응형