चूंकि टाइपस्क्रिप्ट दृढ़ता से टाइप किया जाता है, बस if () {}
जांच करने के लिए null
और undefined
सही ध्वनि नहीं करता है।
क्या टाइपस्क्रिप्ट में इसके लिए कोई समर्पित फ़ंक्शन या सिंटैक्स शुगर है?
चूंकि टाइपस्क्रिप्ट दृढ़ता से टाइप किया जाता है, बस if () {}
जांच करने के लिए null
और undefined
सही ध्वनि नहीं करता है।
क्या टाइपस्क्रिप्ट में इसके लिए कोई समर्पित फ़ंक्शन या सिंटैक्स शुगर है?
जवाबों:
एक करतब दिखाने की जांच का उपयोग करना, आप दोनों का परीक्षण कर सकते null
हैं और undefined
एक हिट में:
if (x == null) {
यदि आप एक सख्त जांच का उपयोग करते हैं, तो यह केवल निर्धारित मानों के लिए सही null
होगा और अपरिभाषित चर के लिए सही मूल्यांकन नहीं करेगा:
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');
उत्पादन
"ए == अशक्त"
"एक अपरिभाषित है"
"बी == अशक्त"
"बी === नल"
"false" == false
"असत्य" जैसे गैर-रिक्त स्ट्रिंग का मूल्यांकन करता है true
।
if(x)
स्टाइल की जाँच के बारे में सही होगा , लेकिन नहीं if(x == null)
, जो केवल पकड़ता है null
और undefined
। इसका उपयोग करके जांचें कि var c: number = 0; check(c, 'b');
यह "शून्य" नहीं है null
, या undefined
।
if( value ) {
}
मूल्यांकन करेगा true
कि value
क्या नहीं है:
null
undefined
NaN
''
0
false
टाइपस्क्रिप्ट में जावास्क्रिप्ट नियम शामिल हैं।
क्या टाइपस्क्रिप्ट में इसके लिए फ़ंक्शन या सिंटैक्स शुगर समर्पित है
टाइपस्क्रिप्ट जावास्क्रिप्ट संस्करण को पूरी तरह से समझता है जो है something == null
।
टाइपस्क्रिप्ट दोनों सही ढंग से null
और undefined
इस तरह की जाँच के साथ शासन करेगा ।
myVar == null
। बस एक और विकल्प।
== null
अशक्त और अपरिभाषित के लिए परीक्षण करने का सही तरीका है। !!something
जेएस (सिर्फ उपयोग something
) में एक सशर्त में एक बेकार जबरदस्ती है । !!something
यह भी 0 और '' को गलत ठहराएगा, जो आप अशक्त / अपरिभाषित की तलाश में नहीं है।
मैंने टाइपस्क्रिप्ट खेल के मैदान पर विभिन्न परीक्षण किए:
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
इसलिए:
मुझे लगता है कि इस उत्तर को अपडेट की आवश्यकता है, पुराने उत्तर के लिए संपादित इतिहास की जांच करें।
मूल रूप से, आपके पास तीन स्थगित मामले हैं अशक्त, अपरिभाषित और अघोषित, नीचे स्निपेट देखें।
// 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
, धन्यवाद @Jaider।
if(typeof something !== 'undefined' && something !== null){...}
में टाइपप्रति 3.7 हम अब वैकल्पिक श्रृंखलन और Nullish वालों की जांच करने के अशक्त और अपरिभाषित एक ही समय में, उदाहरण के लिए:
let x = foo?.bar.baz();
यह कोड जाँच करेगा कि क्या फू परिभाषित है अन्यथा यह अपरिभाषित वापस आ जाएगा
पुराना तरीका :
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 Coalescing है , उदाहरण:
let x = foo ?? bar(); // return foo if it's not null or undefined otherwise calculate bar
पुराना तरीका:
let x = (foo !== null && foo !== undefined) ?
foo :
bar();
आप कोशिश करना चाह सकते हैं
if(!!someValue)
के साथ !!
।
व्याख्या
पहला !
आपकी अभिव्यक्ति को एक boolean
मूल्य में बदल देगा ।
तो !someValue
है true
अगर someValue
है falsy और false
अगर someValue
है truthy । यह भ्रामक हो सकता है।
एक और जोड़ कर !
, अभिव्यक्ति अब true
अगर someValue
है truthy और false
अगर someValue
है falsy है, जो बहुत प्रबंधन करने के लिए आसान है।
विचार-विमर्श
अब, मैं खुद को परेशान क्यों करता हूं if (!!someValue)
जब कोई चीज if (someValue)
मुझे ऐसा ही परिणाम देती है?
क्योंकि !!someValue
वास्तव में एक बूलियन अभिव्यक्ति है, जबकि someValue
बिल्कुल कुछ भी हो सकता है। इस तरह की अभिव्यक्ति अब कार्य लिखने के लिए बदल जाएगी (और भगवान को हमारी आवश्यकता है) जैसे:
isSomeValueDefined(): boolean {
return !!someValue
}
के बजाय:
isSomeValueDefined(): boolean {
if(someValue) {
return true
}
return false
}
मुझे उम्मीद है यह मदद करेगा।
!!'false'
विलेख में है true
क्योंकि 'false'
एक वैध स्ट्रिंग है
के लिए Typescript 2.x.x
आप एक निम्नलिखित तरीके से यह करना चाहिए (का उपयोग करते हुए प्रकार गार्ड ):
tl; डॉ
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
}
}
if(data){}
यह मतलब है! डेटा
true
या false
केवल के रूप में किया जा सकता है । यदि आपके पास null
असाइनमेंट या undefined
मूल्य के साथ बूलियन है , तो दोनों स्थितियों में मूल्य का मूल्यांकन किया जाएगा false
।
यदि आप टाइपस्क्रिप्ट का उपयोग कर रहे हैं, तो यह एक बेहतर तरीका है कि कंपाइलर को रन-टाइम पर चेक करने के बजाय नल और अपरिभाषित (या इसके बारे में संभावना) की जांच करने दें। (यदि आप रन-टाइम पर जांच करना चाहते हैं, तो जितने उत्तर इंगित करते हैं, बस उपयोग करेंvalue == null
)।
strictNullChecks
संकलक को संभावित अशक्त या अपरिभाषित मानों पर विचार करने के लिए संकलन विकल्प का उपयोग करें । यदि आप इस विकल्प निर्धारित करते हैं, और फिर वहाँ एक स्थिति है जहाँ आप है करते अशक्त की अनुमति है और अपरिभाषित करना चाहते हैं, आप के रूप में प्रकार परिभाषित कर सकते Type | null | undefined
।
आप पास करना चाहते हैं tslint
की स्थापना के बिना strict-boolean-expressions
करने के लिए allow-null-union
या allow-undefined-union
, आप उपयोग करने की आवश्यकता isNullOrUndefined
से node
की 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 नियम सख्त होते हैं तो बिल्कुल संश्लिष्ट चीनी नहीं बल्कि उपयोगी होती है।
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
जब आप उस null
के लिए जांच करने की कोशिश करते हैं tslint
| कंपाइलर शिकायत करेंगे।
//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'.
इस धागे में शामिल होने के लिए देर हो रही है, लेकिन मुझे यह जावास्क्रिप्ट हैक करने की जाँच में बहुत आसान है कि क्या कोई मान अपरिभाषित है
if(typeof(something) === 'undefined'){
// Yes this is undefined
}
आमतौर पर मैं बाजीगरी-जांच करता हूं क्योंकि फेंटन पहले से ही चर्चा में है । इसे और अधिक पठनीय बनाने के लिए, आप उपयोग कर सकते isNil ramda से।
import * as isNil from 'ramda/src/isNil';
totalAmount = isNil(totalAmount ) ? 0 : totalAmount ;
एक क्रिया के रूप में, यदि आप केवल अशक्त और अपरिभाषित मूल्यों की तुलना करना चाहते हैं, तो संदर्भ के लिए निम्न उदाहरण कोड का उपयोग करें:
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}`);
}
यदि incomingValue
घोषित नहीं किया गया है, तो टाइपस्क्रिप्ट को एक अपवाद वापस करना चाहिए। यदि यह घोषित है, लेकिन परिभाषित नहीं है, तोconsole.log()
"आने वाला मूल्य है: अपरिभाषित"। ध्यान दें कि हम सख्त समान ऑपरेटर का उपयोग नहीं कर रहे हैं।
"सही" तरीका (विवरण के लिए अन्य उत्तरों की जांच करें), यदि incomingValue
एक boolean
प्रकार नहीं है , तो बस मूल्यांकन करें कि क्या इसका मूल्य सच है, यह निरंतर / चर प्रकार के अनुसार मूल्यांकन किया जाएगा। एक true
स्ट्रिंग का उपयोग स्ट्रिंग के रूप में स्पष्ट रूप से परिभाषित किया जाना है = ''
प्रतिभाजन। यदि नहीं, तो इसका मूल्यांकन किया जाएगा 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"
}
आप उपयोग कर सकते हैं
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
null
। इसे आज़माएँ: plnkr.co/edit/NfiVnQNes1p8PvXd1fCG?p=preview
चूंकि टाइपस्क्रिप्ट ES6 जावास्क्रिप्ट का टाइप किया हुआ सुपरसेट है। और लॉशश जावास्क्रिप्ट की एक लाइब्रेरी है।
अगर मूल्य शून्य या अपरिभाषित है, तो जांच के लिए लॉश का उपयोग करना _.isNil()
।
_.isNil(value)
मूल्य (*): चेक करने का मान।
(बूलियन) : यदि मूल्य शून्य है, तो और गलत है।
_.isNil(null);
// => true
_.isNil(void 0);
// => true
_.isNil(NaN);
// => false
सावधान यदि आप स्थानीय भंडारण का उपयोग कर रहे हैं, तो आप अपरिभाषित मूल्य के बजाय अपरिभाषित स्ट्रिंग के साथ समाप्त कर सकते हैं:
localStorage.setItem('mykey',JSON.stringify(undefined));
localStorage.getItem('mykey') === "undefined"
true
लोगों को यह उपयोगी लग सकता है: https://github.com/angular/compenders/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);
});
});
मैं हमेशा इसे इस तरह लिखता हूं:
var foo:string;
if(!foo){
foo="something";
}
यह ठीक काम करेगा और मुझे लगता है कि यह बहुत पठनीय है।
0
भी पास करता !foo
है।
undefined
से अलग है false
। यह वैकल्पिक बूलियन फ़ंक्शन मापदंडों के साथ बहुत आम है, जहां आपको सामान्य जावास्क्रिप्ट दृष्टिकोण का उपयोग करना चाहिए:function fn(flag?: boolean) { if (typeof flag === "undefined") flag = true; /* set default value */ }
var isTrue; if(isTrue)//skips, if(!isTrue)// enters if(isTrue === undefined)//enters
:। यह भी टाइपस्क्रिप्ट में कोशिश की var isTrue:boolean
, जिसके साथ अपरिभाषित था, और अगर जाँच करता है। @ जी, क्या आपने जो कोशिश की और जो मैंने कोशिश की उसके बारे में कुछ अलग है?
Since TypeScript is strongly-typed
मैं इसे के डॉक्स में इस नहीं पा सके और मैं इसके बारे में शक है ...