Javascript에 null 통합 연산자가 있습니까?
예를 들어 C #에서는 다음과 같이 할 수 있습니다.
String someString = null;
var whatIWant = someString ?? "Cookies!";
Javascript에 대해 알아낼 수있는 가장 좋은 근사는 조건부 연산자를 사용하는 것입니다.
var someString = null;
var whatIWant = someString ? someString : 'Cookies!';
어느 정도 icky IMHO입니다. 더 잘할 수 있습니까?
답변
최신 정보
JavaScript는 이제 nullish 통합 연산자 (??)를 지원합니다 . 왼쪽 피연산자가 null
또는 undefined
일 때 오른쪽 피연산자를 반환하고, 그렇지 않으면 왼쪽 피연산자를 반환합니다.
사용하기 전에 호환성을 확인하십시오.
C # Null 병합 연산자와 동등한 JavaScript??
) 가 논리 OR ( ||
)을 사용하고 있습니다 .
var whatIWant = someString || "Cookies!";
동작이 C #의 동작과 일치하지 않는 경우가 있지만 (아래에 명시되어 있음) JavaScript에서 기본 / 대체 값을 할당하는 일반적이고 간결한 방법입니다.
설명
첫 번째 피연산자의 유형에 관계없이 부울로 캐스팅하면 결과 false
는 두 번째 피연산자를 사용합니다. 아래의 모든 경우에주의하십시오.
alert(Boolean(null)); // false
alert(Boolean(undefined)); // false
alert(Boolean(0)); // false
alert(Boolean("")); // false
alert(Boolean("false")); // true -- gotcha! :)
이것은 다음을 의미합니다.
var whatIWant = null || new ShinyObject(); // is a new shiny object
var whatIWant = undefined || "well defined"; // is "well defined"
var whatIWant = 0 || 42; // is 42
var whatIWant = "" || "a million bucks"; // is "a million bucks"
var whatIWant = "false" || "no way"; // is "false"
답변
function coalesce() {
var len = arguments.length;
for (var i=0; i<len; i++) {
if (arguments[i] !== null && arguments[i] !== undefined) {
return arguments[i];
}
}
return null;
}
var xyz = {};
xyz.val = coalesce(null, undefined, xyz.val, 5);
// xyz.val now contains 5
이 솔루션은 SQL 병합 기능과 같이 작동하며 여러 인수를 허용하며 값이없는 경우 널을 리턴합니다. C #처럼 동작합니다 ?? “”, false 및 0은 NOT NULL로 간주되므로 실제 값으로 계산됩니다. 당신이 .net 배경에서 온다면, 이것이 가장 자연스러운 느낌의 해결책이 될 것입니다.
답변
예, 곧옵니다. 참조 여기에 제안 하고 여기에 구현 상태를 .
다음과 같이 보입니다 :
x ?? y
예
const response = {
settings: {
nullValue: null,
height: 400,
animationDuration: 0,
headerText: '',
showSplashScreen: false
}
};
const undefinedValue = response.settings?.undefinedValue ?? 'some other default'; // result: 'some other default'
const nullValue = response.settings?.nullValue ?? 'some other default'; // result: 'some other default'
const headerText = response.settings?.headerText ?? 'Hello, world!'; // result: ''
const animationDuration = response.settings?.animationDuration ?? 300; // result: 0
const showSplashScreen = response.settings?.showSplashScreen ?? true; // result: false
답변
만약 ||
이야 ‘C 번호의 교체로 ??
좋지 귀하의 경우 충분한, 그것은 빈 문자열과 0을 삼켜 때문에, 당신은 항상 당신의 자신의 기능을 쓸 수있다 :
function $N(value, ifnull) {
if (value === null || value === undefined)
return ifnull;
return value;
}
var whatIWant = $N(someString, 'Cookies!');
답변
아무도 여기에 대한 잠재력을 언급하지 NaN
않았습니다. 그래서 저는 2 센트를 더할 것이라고 생각했습니다.
주어진 코드의 경우 :
var a,
b = null,
c = parseInt('Not a number'),
d = 0,
e = '',
f = 1
;
||
연산자 를 사용하는 경우 첫 번째 거짓이 아닌 값을 얻습니다.
var result = a || b || c || d || e || f; // result === 1
here 게시 된 일반적인 병합 방법을 사용하면 다음과 같은c
값을 얻습니다 .NaN
var result = coalesce(a,b,c,d,e,f); // result.toString() === 'NaN'
이것들 중 어느 것도 나에게 옳지 않은 것 같습니다. 당신의 세계와 다를 수있는 나의 작은 합체 논리 세계에서, 나는 정의되지 않은, null, NaN을 모두 “무시한”것으로 간주합니다. 그래서 다시 돌아올 것으로 기대합니다d
통합 방법에서 0 .
누군가의 뇌가 내 것과 같이 작동하고을 제외하고 싶다면 NaN
이 방법으로 다음을 수행하십시오.
function coalesce() {
var i, undefined, arg;
for( i=0; i < arguments.length; i++ ) {
arg = arguments[i];
if( arg !== null && arg !== undefined
&& (typeof arg !== 'number' || arg.toString() !== 'NaN') ) {
return arg;
}
}
return null;
}
코드를 최대한 짧게하고 명확성이 부족하지 않은 사람들을 위해 @impinball에서 제안한대로 사용할 수도 있습니다. 이것은 NaN이 NaN과 같지 않다는 사실을 이용합니다. 당신은 더 많은 것을 여기에서 읽을 수 있습니다 이유가 NaN NaN이 같지 않음?
function coalesce() {
var i, arg;
for( i=0; i < arguments.length; i++ ) {
arg = arguments[i];
if( arg != null && arg === arg ) { //arg === arg is false for NaN
return arg;
}
}
return null;
}
답변
JavaScript 고유의 null 정의에주의하십시오. 자바 스크립트에는 “값 없음”에 대한 두 가지 정의가 있습니다. 1. Null : 변수가 null이면 변수에 데이터가 포함되어 있지 않지만 변수가 이미 코드에 정의되어 있음을 의미합니다. 이처럼 :
var myEmptyValue = 1;
myEmptyValue = null;
if ( myEmptyValue === null ) { window.alert('it is null'); }
// alerts
이 경우 변수 유형은 실제로 Object입니다. 그것을 테스트하십시오.
window.alert(typeof myEmptyValue); // prints Object
-
정의되지 않음 : 변수가 코드에서 이전에 정의되지 않았으며 예상대로 값이 포함되지 않은 경우. 이처럼 :
if ( myUndefinedValue === undefined ) { window.alert('it is undefined'); } // alerts
그러한 경우 변수 유형은 ‘정의되지 않음’입니다.
형식 변환 비교 연산자 (==)를 사용하면 JavaScript는 이러한 빈 값 모두에 대해 동일하게 작동합니다. 이들을 구별하려면 항상 유형 엄격한 비교 연산자 (===)를 사용하십시오.
답변
설명을 읽은 후 @Ates Goral의 답변은 C #에서 수행하는 것과 동일한 작업을 JavaScript로 수행하는 방법을 제공합니다.
@Gumbo의 답변은 null을 확인하는 가장 좋은 방법을 제공합니다. 그러나 특히 JavaScript 확인 및 / 또는 문제 ==
와 관련 ===
하여 JavaScript 와의 차이점에 유의해야합니다.undefined
null
.
여기 에 두 용어의 차이점에 대한 좋은 기사가 있습니다 . 기본적으로, ==
대신에 를 사용하면 ===
JavaScript가 비교중인 값을 통합 하고이 병합 후 비교 결과를 반환한다는 것을 이해하십시오 .