যেহেতু টাইপ করা বিষয় দৃঢ়ভাবে টাইপ করা হয়, কেবল ব্যবহার 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');
আউটপুট
"a == নাল"
"একটি অপরিবর্তিত"
"খ == নাল"
"খ === নাল"
"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
, ধন্যবাদ @ জয়দার।
if(typeof something !== 'undefined' && something !== null){...}
ইন টাইপ করা বিষয় 3.7 আমরা এখন ঐচ্ছিক chaining এবং Nullish কোয়ালেসিং চেক করতে নাল এবং undefined একই সময়, উদাহরণস্বরূপ:
let x = foo?.bar.baz();
এই কোডটি foo সংজ্ঞায়িত করা হয়েছে কিনা তা যাচাই করবে অন্যথায় এটি অপরিবর্তিত রয়েছে
পুরানো উপায় :
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) { // ... }
Alচ্ছিক চেইন সহ হবে:
let x = foo?.bar();
if (foo?.bar?.baz) { // ... }
আর একটি নতুন বৈশিষ্ট্য হ'ল নুলিশ কোলেসিং , উদাহরণস্বরূপ:
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
একেবারে কিছু হতে পারে। এই ধরণের অভিব্যক্তিটি এখন ফাংশনগুলি লেখার অনুমতি দেয় (এবং Godশ্বরের আমাদের সেগুলি দরকার) যেমন:
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()
ভেরিয়েবলের ধরণকে সম্মান জানাবে এবং নিম্নলিখিত কোডটি এই চেকটিকে অ্যাকাউন্টে নিতে হবে know
উদাহরণ 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
ঠিক সিনট্যাকটিক চিনি নয় তবে যখন আপনার স্লিন্টের নিয়ম কঠোর হয়।
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);
}
জেএসের কোনও প্রকার নেই বলেই এটি বেশ ভাল
//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
}
ভার্ভোজ উপায় হিসাবে, আপনি যদি কেবল নাল এবং অপরিজ্ঞাত মানগুলির তুলনা করতে চান তবে রেফারেন্সের জন্য নিম্নলিখিত উদাহরণ কোডটি ব্যবহার করুন:
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= পূর্বরূপ
যেহেতু টাইপস্ক্রিপ্ট 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/components/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
আমি এটির