Null이거나 JavaScript에서 정의되지 않은 경우 값 바꾸기
나는 그것을 적용하기 위한 요구사항이 있습니다.??
자바스크립트에 대한 C# 연산자인데 어떻게 하는지 모르겠습니다.이를 C#에서 살펴봅니다.
int i?=null;
int j=i ?? 10;//j is now 10
이제 자바스크립트로 설정합니다.
var options={
filters:{
firstName:'abc'
}
};
var filter=options.filters[0]||'';//should get 'abc' here, it doesn't happen
var filter2=options.filters[1]||'';//should get empty string here, because there is only one filter
어떻게 하면 올바르게 할 수 있습니까?
감사해요.
편집: 문제의 절반을 발견했습니다.개체에 'indexer' 표기법을 사용할 수 없습니다(my_object[0]
). 우회할 수 있는 방법이 있습니까? (필터 속성의 이름을 미리 모르므로 필터 속성을 반복하고 싶지 않습니다.)
자바스크립트와 동등한 것은 다음과 같습니다.
var i = null;
var j = i || 10; //j is now 10
논리 연산자는 부울 값을 반환하지 않고 true로 변환할 수 있는 첫 번째 값을 반환합니다.
또한 단일 개체 대신 개체 배열을 사용합니다.
var options = {
filters: [
{
name: 'firstName',
value: 'abc'
}
]
};
var filter = options.filters[0] || ''; // is {name:'firstName', value:'abc'}
var filter2 = options.filters[1] || ''; // is ''
그것은 색인으로 접근할 수 있습니다.
ES2020 답변
새로운 Nullish Coalesing Operator는 마침내 JavaScript에서 사용할 수 있습니다.그러나 브라우저 지원에 유의해야 합니다.바벨과 같은 자바스크립트 컴파일러를 사용하여 이전 버전과 호환되는 것으로 변환해야 할 수도 있습니다.
문서에 의하면,
nullish 병합 연산자(??)는 왼쪽 피연산자가 null이거나 정의되지 않으면 오른쪽 피연산자를 반환하고, 그렇지 않으면 왼쪽 피연산자를 반환하는 논리 연산자입니다.
const options={
filters:{
firstName:'abc'
}
};
const filter = options.filters[0] ?? '';
const filter2 = options.filters[1] ?? '';
이렇게 하면 두 변수 모두 다음 값을 가질 수 있습니다.''
한다면filters[0]
아니면filters[1]
이다null
, 아니면undefined
.
nullish calesing 연산자는 다음과 같은 다른 유형의 false 값에 대한 기본값을 반환하지 않습니다.0
그리고.''
. 모든 잘못된 값을 설명하려면 OR 연산자를 사용해야 합니다.||
.
논리적 무효 할당, 2020+ 솔루션
새 연산자가 추가되었습니다.??=
. 이는 다음과 같습니다.value = value ?? defaultValue
.
||=
그리고.&&=
이와 유사하며 아래 링크들이 있습니다.
왼쪽이 정의되지 않았거나 null인지 확인하고 이미 정의된 경우 단락합니다.그렇지 않으면 왼쪽에 오른쪽 값이 할당됩니다.
기본 예시
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" }
기능 예시
function config(options) {
options.duration ??= 100
options.speed ??= 25
return options
}
config({ duration: 555 }) // { duration: 555, speed: 25 }
config({}) // { duration: 100, speed: 25 }
config({ duration: null }) // { duration: 100, speed: 25 }
??= 브라우저 지원 2021년 9월 - 90%
TLDR:
int j=i ?? 10;
javascript에서도 사용해도 무방합니다.교체만 하면 됩니다.int
와 함께let
.
??
대||
??
보다 선호되어야 할||
null과 미정의 경우만 확인하기 때문입니다.
아래의 표현은 모두 참입니다.
(null || 'x') === 'x' ;
(undefined || 'x') === 'x' ;
//Most of the times you don't want the result below
('' || 'x') === 'x' ;
(0 || 'x') === 'x' ;
(false || 'x') === 'x' ;
//-----
//Using ?? is preferred
(null ?? 'x') === 'x' ;
(undefined ?? 'x') === 'x' ;
//?? works only for null and undefined, which is in general safer
('' ?? 'x') === '' ;
(0 ?? 'x') === 0 ;
(false ?? 'x') === false ;
별표:브라우저 호환성을 확인하고 이러한 다른 브라우저를 지원해야 한다면 babel을 사용합니다.
문제의 절반을 발견했습니다.개체(my_object[0])에 'indexer' 표기를 사용할 수 없습니다.우회할 방법이 있습니까?
아니요. 객체 리터럴은 이름에서 알 수 있듯이 객체이며 배열이 아닙니다. 따라서 속성의 특정 순서가 없으므로 인덱스를 기준으로 속성을 검색할 수 없습니다.값을 검색할 수 있는 유일한 방법은 특정 이름을 사용하는 것입니다.
var someVar = options.filters.firstName; //Returns 'abc'
으로.for ... in
프:
for(var p in options.filters) {
var someVar = options.filters[p]; //Returns the property being iterated
}
파괴해법
질문 내용이 변경되었을 수도 있으니 철저히 답변하도록 하겠습니다.
파괴 기능을 사용하면 속성이 있는 모든 항목에서 값을 끌어낼 수 있습니다.null/undefined 및 name alias의 경우 기본값을 정의할 수도 있습니다.
const options = {
filters : {
firstName : "abc"
}
}
const {filters: {firstName = "John", lastName = "Smith"}} = options
// firstName = "abc"
// lastName = "Smith"
참고: 자본화 문제
배열로 작업하는 경우 다음과 같이 수행합니다.
이 경우 이름은 배열의 각 개체에서 추출되며 고유한 별칭이 부여됩니다.하지 않을 수 입니다.= {}
가 추가되었습니다.
const options = {
filters: [{
name: "abc",
value: "lots"
}]
}
const {filters:[{name : filter1 = "John"} = {}, {name : filter2 = "Smith"} = {}]} = options
// filter1 = "abc"
// filter2 = "Smith"
브라우저 지원 92% 2020년 7월
언급URL : https://stackoverflow.com/questions/1011317/replace-a-value-if-null-or-undefined-in-javascript
'programing' 카테고리의 다른 글
모듈이 개체가 할 수 있는 것과 동일한 속성을 가질 수 있습니까? (0) | 2023.10.07 |
---|---|
여러 테이블에서 하나의 쿼리에 여러 개의 완전한 조인 (0) | 2023.10.07 |
두 열의 좌측 외측 접합 성능 문제 (0) | 2023.10.07 |
오토젠의 직업은 무엇입니까?Linux에서 c++ 패키지를 구축할 때 sh (0) | 2023.10.07 |
jquery select2 - 작동하지 않음 (0) | 2023.10.07 |