자바 스크립트 변수를 테스트 한 다음 정의되지 않은 경우 변수를 정의 할 수는 있지만 말할 방법이 없습니다.
var setVariable = localStorage.getItem ( 'value') || 0;
훨씬 더 분명한 방법으로 보입니다. 다른 언어로 보았을 것입니다.
localStorage.getItem()사용자가 (크롬에 적어도) 장애인 쿠키가있는 경우 당신이 내부를 포장 할 수 있도록 예외가 발생합니다 try...catch절
자바 스크립트 변수를 테스트 한 다음 정의되지 않은 경우 변수를 정의 할 수는 있지만 말할 방법이 없습니다.
var setVariable = localStorage.getItem ( 'value') || 0;
훨씬 더 분명한 방법으로 보입니다. 다른 언어로 보았을 것입니다.
localStorage.getItem()사용자가 (크롬에 적어도) 장애인 쿠키가있는 경우 당신이 내부를 포장 할 수 있도록 예외가 발생합니다 try...catch절
답변:
예, 그렇게 할 수는 있지만 실제로는 undefined 와 반대로 검색 된 값이 false 인 경우 기본값을 지정합니다 . 따라서에만 일치하지 않을 뿐만 아니라 , , , , (하지만 하지 ).undefinednullfalse0NaN"" "0"
변수가 엄격 할 경우에만 기본값으로 설정 undefined하려면 가장 안전한 방법은 다음과 같습니다.
var x = (typeof x === 'undefined') ? your_default_value : x;
최신 브라우저에서는 실제로 작성하는 것이 안전합니다.
var x = (x === undefined) ? your_default_value : x;
그러나 undefined정의 된 값을 가진 변수를 선언 할 수있는 이전 브라우저에서는이를 파괴 하여 테스트에 실패 할 수 있습니다.
var x = (x === undefined ? def_val : x);약간 더 길게 사용하면 단점이 있습니까 var x = (typeof x === 'undefined') ? def_val : x;? 행동이 다릅니 까?
undefined다시 정의하여 동등성 테스트에 실패했습니다.
||정의되지 않은 엄격한 테스트 에서는이 방법을 사용할 수 없으며 undefined조건부와 함께 명시적인 테스트를 사용해야합니다 .
2018 ES6 답변은 다음과 같습니다.
return Object.is(x, undefined) ? y : x;
변수 x가 정의되지 않은 경우 변수 y를 반환합니다. 그렇지 않으면 변수 x가 정의 된 경우 변수 x를 반환합니다.
Object.is보다 낫지 않습니다 ===. "=== 연산자 (및 == 연산자도)는 숫자 값 -0과 +0을 동일하게 취급하고 Number.NaN을 NaN과 동일하지 않은 것으로 취급합니다." ( developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… ) 여기서 중요하지 않습니다.
Object.is두 피연산자가 모두 인 경우 사용 하십시오 NaN.
undefined. 그래서 ===시간의 100 % 아닌 98 %를 작동합니다. ===읽기 쉽고, 특히 한 눈에 더 짧고, 불필요한 메소드 호출을 피할 수 있다는 장점이 있습니다. 개인적으로 Object.is()상황이 필요할 때만 사용 ===하고 다른 모든 경우를 선호합니다 .
ES2020 답변
으로 Nullish 합체 경우 운영자, 당신은 기본 값을 설정할 수 있습니다 valuenull 또는 정의되지 않은입니다.
const setVariable = localStorage.getItem('value') ?? 0;
그러나 Nullish 통합 연산자는 0and 같은 다른 유형의 잘못된 값에 대한 기본값을 반환하지 않습니다 ''.
운영자에 대한 브라우저 지원은 제한되어 있습니다. caniuse 의 데이터에 따르면 , 2020 년 4 월 기준으로 브라우저의 48.34 % 만 지원됩니다. Node.js 지원은 버전 14 에 추가되었습니다 .
FP ( Functional Programming ) 팬이라면 Ramda 는 defaultTo 라는 깔끔한 도우미 기능을 가지고 있습니다 .
용법:
const result = defaultTo(30)(value)
undefined부울 값을 처리 할 때 더 유용 합니다.
const result2 = defaultTo(false)(dashboard.someValue)
const result = value || 30;중간 함수와 +1000 바이트를 사용하는 것을 제외하고 는 정확히 입니다 – lib
오늘이 시나리오를 살펴 보았고 여러 값으로 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가 정의되지 않았거나 null 인 경우 0을 덮어 쓰지 않는 경우 ID를 -1로 설정하는 호출 예입니다.
data.ID = Util.getIfNotSet(data.ID, -1, true);
기본값이 부울 값인 경우에도 작동합니다.
var setVariable = ( (b = 0) => b )( localStorage.getItem('value') );
신규 사업자는 현재 브라우저에 추가되고 ??=, ||=하고 &&=. 이 게시물은에 초점을 맞출 것입니다 ??=.
왼쪽이 정의되어 있지 않은지 확인하고 이미 정의 된 경우 단락을 검사합니다. 그렇지 않으면 오른쪽이 왼쪽 변수에 할당됩니다.
// Using ??=
name ??= "Dave"
// Previously, ES2020
name = name ?? "Dave"
// Before that (not equivalent, but commonly used)
name = name || "Dave" // name ||= "Dave"
let a // undefined
let b = null
let c = false
a ??= true // true
b ??= true // true
c ??= true // false
// Equivalent to
a = a ?? true
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" }
?? = 브라우저 지원 2020 년 7 월-.03 %