কফিস্ক্রিপ্ট অপরিজ্ঞাত


89

জাভাস্ক্রিপ্টে কোনও ভেরিয়েবল কখনই তৈরি হয়নি কিনা তা যাচাই করার জন্য, আমরা কেবল এটিই করি

if (typeof MyVariable !== "undefined"){ ... }

আমি অবাক হয়ে গিয়েছিলাম যে আমি কীভাবে কফিসিপিটিতে এটি করি? ... আমি এরকম কিছু চেষ্টা করি

if (MyVariable?false){ ... }

তবে এই চেকটি যদি MyVariableকোনও ফাংশন হয় তবে তা যদি মাইভ্যারেবল (মিথ্যা) কল করে তবে তা অকার্যকর (0) বা এরকম কিছু কল করবে।



চেষ্টা করুন if MyVariable isnt undefinedযা উত্পাদন করে if (MyVariable !== void 0)
ইয়ামি ওডিমেল

উত্তর:


163

অবশেষে আমি এটি করার সহজ উপায়টি পেয়েছি:

if (MyVariable?){ ... }

এটি উত্পন্ন করবে:

if (typeof MyVariable !== "undefined" && MyVariable !== null){ ... }

আপডেট 04/07/2014 ডেমো লিঙ্ক

এখানে চিত্র বর্ণনা লিখুন


58
প্রকৃতপক্ষে এটি কেবল উত্পন্ন হয়েছেitem != null
পেনসিলচেক 26'13

13
@ পেনসিলচেক - কারণ কম্পাইলার নির্ধারণ করেছে যে আইটেমটি আপনার কোডে সংজ্ঞায়িত হয়েছিল। (এছাড়াও, দুর্দান্ত নাম - যদিও এটি আমার জন্য এখন ট্যাবলেট চেক করে :) এই উত্তরটি নাল মানকেও তুলে ধরেছে যা অপরিজ্ঞাত থেকে পৃথক। এটি আলাদা প্রশ্নের আইএমএইচওর উত্তর বলে মনে হচ্ছে
শেঠ

4
@ শেঠ, হ্যাঁ আমি সর্বদা সেই উপদ্রব দ্বারা জ্বলে উঠেছি, যা পরবর্তী যৌক্তিক প্রশ্ন উত্থাপন করে: সিএস কি নিম্নলিখিতগুলির জন্য কোনও সিনট্যাক্টিকাল শর্টকাট সরবরাহ করে: মাইভ্যারেবল = মাইমেথোদ; যদি মাইভ্যারেবল? ... মাইমেথোদ কোথায় ফিরে আসতে পারে undefined? অথবা আপনি অবশ্যই অবলম্বন করা উচিত if typeof myVariable isnt 'undefined'?
নেফফক্স

4
@ নেভারফক্স যতদূর আমি সচেতন (অপরিজ্ঞাত টাইপ চেক) - কফিস্ক্রিপ্ট মনে করে যে নাল এবং অপরিজ্ঞাত বিবাদ করা উচিত।
শেঠ

6
@ সীত, সত্যই নয়। অ কঠোর তুলনা ( ==এবং !=) প্রকৃতপক্ষে আচরণ nullএবং undefinedসমান মান হিসাবে, তাই item != nullআসলে উভয়ের জন্য পরীক্ষা nullএবং undefinedএকই সময়ে। এটি যেমন লেখা হয় না, তা নয় item !== null
টরিনজেঞ্জ

26

প্রথমে আপনার প্রশ্নের উত্তর দিতে:

if typeof myVariable isnt 'undefined' then # do stuff

যখন অপরিজ্ঞাত এবং মিথ্যা (উদাহরণস্বরূপ, যদি মাই ভেরিয়েবল সত্য, মিথ্যা বা অপরিজ্ঞাত হতে পারে) এর মধ্যে পার্থক্য করার প্রয়োজন বাদে বেশিরভাগ ক্ষেত্রে ম্যাগ্রেঞ্জগুলির সমাধান কাজ করবে।

এবং কেবল উল্লেখ করার জন্য, আপনার শর্তগুলি বন্ধনীগুলিতে আবৃত করা উচিত নয় এবং আপনার কোঁকড়ানো ধনুর্বন্ধনী ব্যবহার করা উচিত নয়।

thenযদি সবকিছু একই লাইনে হয় শব্দ ব্যবহার করা যেতে পারে, অন্যথায় খাঁজ ব্যবহার করেন সেটা নির্দিষ্ট করতে হবে তা কোড অবস্থার ভিতরে নেই।

if something  
    # this is inside the if-statement  
# this is back outside of the if-statement

আশাকরি এটা সাহায্য করবে!


মূল isntশব্দটি !=কফিস্ক্রিপ্টের সমতুল্য এবং আপনি জাভাস্ক্রিপ্টে অভ্যস্ত থাকলে আরও পড়তে পারা যায়।
অ্যারন ডুফর

12
সমান !==, না!=
মিশা আরেফিয়েভ

4
এটি সুনির্দিষ্ট উত্তর - অন্যান্য অনেকেরও নাল মানগুলির সাথে যোগাযোগ করে। থেক্স
শেঠ

4
@ মিশাআরেফিয়েভ !=কফিতে যা !==জাভাস্ক্রিপ্টে অনুবাদ করে।
সুজনা

14

এই উত্তরটি coffeescript এর পুরানো সংস্করণের জন্য। আপনি যদি আপ-টু ডেট উত্তর চান তবে উপরের জায়েদারের উত্তর দেখুন (জুলাই ২০১৪)

এই কফিসক্রিপ্টটি আপনি যা চান তা করেন:

if not MyVariable?
  MyVariable = "assign a value"

যা উত্পাদন করে:

if (!(typeof MyVariable !== "undefined" && MyVariable !== null)) {
  MyVariable = "assign a value";
}

এনবি যদি আপনি MyVariableপ্রথমে কোনও অ্যাসাইনমেন্ট করেন , MyVariableআপনি এই কোড হিসাবে যেমন অপরিজ্ঞাত করে রেখেছেন তবুও এটি সংকলন করে:

if (!(MyVariable != null)) {
  MyVariable = "assign a value";
}

আমি বিশ্বাস করি এটি কাজ করে কারণ !=কফি স্ক্রিপ্টস দ্বারা ব্যবহৃত Existential Operator(প্রশ্ন চিহ্ন) undefinedসমান হতে কোয়ার্স করে null

PS আপনি আসলে if (MyVariable?false){ ... }কাজ পেতে পারেন? অস্তিত্বমূলক অপারেটর এবং মিথ্যা এর মধ্যে কোন স্থান না থাকলে এটি আমার জন্য সংকলন করে না, MyVariable? falseযা কফি স্ক্রিপ্টটিকে এটি কোনও ফাংশনের মতো করে পরীক্ষা করে তোলে কারণ falseএটি মনে করে যে এটি আপনার পরামিতি MyVariable, যেমন :

if MyVariable? false
  alert "Would have attempted to call MyVariable as a function"
else
  alert "but didn't call MyVariable as it wasn't a function"

উত্পাদন:

if (typeof MyVariable === "function" ? MyVariable(false) : void 0) {
  alert("Would have attempted to call MyVariable as a function");
} else {
  alert("but didn't call MyVariable as it wasn't a function");
}

4
এটি পুরানো কফি স্ক্রিপ্ট। variable?এখন শুধুমাত্র পরিবর্তনশীল প্রনয়ন = নাল!
Gambai

@ গাম্বাই আপনি কি নিশ্চিত? ওয়েবসাইটটি এখনও দেখায় ... !== null coffeescript.org/#try:variable%3F
AJP

4
হ্যাঁ, সংকলক এখন মাঝে মধ্যে অপটিমাইজেশন হিসাবে ! = অপরিবর্তিত বাদ দেয় কারণ যখন ভেরিয়েবলটি কোডের কোথাও সংজ্ঞায়িত করা উচিত। আমি বলতে উচিত কম্পাইলার সবসময় সঠিকভাবে কাজ কারণ না ...
Suzana

@ সুজানা_ কে জেনে ভাল। আমি নিশ্চিত যে এই প্রশ্নটি নিয়ে আসা লোকেরা আপ টু ডেট উত্তর চাইবে, দয়া করে আমার সম্পাদনা করতে বা একটি নতুন উত্তর পোস্ট করতে দ্বিধা বোধ করবেন এবং আমি আমার উপরের অংশ থেকে এটিতে লিঙ্ক করব। আমি ES6 / টাইপস্ক্রিপ্ট গ্রহণ করার পরে আর কফিস্ক্রিপ্ট ব্যবহার করি না যাতে উত্তরটি আপডেট করতে পারি না। : আসলে এটা Jaider এর উত্তর কভার এটা দেখে মনে হচ্ছে stackoverflow.com/a/10238211/539490
AJP


9

উপরের জায়েদারের উত্তর ছাড়াও (অপর্যাপ্ত সুনামের কারণে আমি মন্তব্য করতে পারিনি) , সাবধান থাকুন এটি যদি কোনও বস্তুর / অ্যারের ভিতরে থাকে তবে এটি অন্যরকম:

someArray['key']?

রূপান্তর করা হবে:

someArray['key'] != null

Js2coffee.org থেকে স্ক্রিনশট :

js2coffee.org


আপনি কীটি উপস্থিত আছেন কিনা তা পরীক্ষা করে দেখছেন, সুতরাং এটি উপলব্ধি করে। যদি আপনারও অ্যারে উপস্থিত রয়েছে কিনা তা খতিয়ে দেখা দরকার, কিছু অ্যারে? ['কী'] চেষ্টা করবেন?
জোশুয়া ডেভিসন

6

আমি শুধু ব্যবহার:

if (myVariable)
    //do stuff

অপরিজ্ঞাত হিসাবে মিথ্যা হওয়ায় এটি কেবল তখনই কাজ করবে যখন মাইভ্যারেবল অপরিজ্ঞাত না হয়।

আপনাকে কেবল সচেতন হতে হবে যে এটি 0, "" এবং শূন্য মানের জন্য 'স্টাফ করবে'


4
আমি এই পদ্ধতিটিকে ততক্ষণ পছন্দ করি যতক্ষণ myVariableনা এর মতো nullবা মিথ্যা মান হিসাবে অনুমোদিত না হয় 0
ব্রায়ান ডাউনিং

3

একটি অনির্ধারিত এবং নন-নাল ভেরিয়েবলের জন্য একটি ভেরিয়েবল নির্ধারণ করার সবচেয়ে পরিষ্কার উপায়টি হ'ল unless:

unless ( myVar? )
    myVar = 'val'

2

কেন কেবল ওআর হাদিস ব্যবহার করবেন না?

myVar or 'val'

সুতরাং, ফলাফলটি MyVar এর সমান হবে, যদি না এটি নির্ধারিত হয় তবে এটি 'ভাল' এর সমান হবে।


4
এই বাগ্ধারা যে কোনো falsish মান ফিরে আসবে 'Val' যাহা এটা হতে অনুমিত পরিবর্তে - সহ '', 0.0এবং false। যা সম্ভবত, অযাচিত নয়।
toriningen
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.