পিএইচপি'র ডাইয়ের সমতুল্য জাভাস্ক্রিপ্ট


103

জাভাস্ক্রিপ্টে "ডাই" এর মতো কিছু আছে কি? আমি "বিরতি" দিয়ে চেষ্টা করেছি, তবে কাজ করে না :)


4
: এই দেখুন stackoverflow.com/questions/550574/...
stefita

"মারা", "গেটো" এর মতো কাঠামোগত প্রোগ্রামিংয়ের সাথে সম্মতিযুক্ত নয়। গুরুতর প্রকল্পের জন্য এই ধরণের নির্দেশাবলী কখনও ব্যবহার করা উচিত নয়। en.wikedia.org/wiki/ কাঠামো_ প্রোগ্রাম
অ্যাড্রিয়ান মায়ার

4
function die(str) {throw new Error(str || "Script ended by death");}বা এক্সডি প্রচুর পরিমাণে আরও ভাল বিকল্প রয়েছে তবে এটি কার্যকর হবে। ডিবাগিংয়ের জন্য ভাল হতে পারে, আপনি যদি স্ক্রিপ্টের প্রথম অংশটি চালাতে চান তবে এটি কাজ করে তা নিশ্চিত করে নিন।
নিট দ্য ডার্ক অ্যাবসোল

@stefita উত্তরগুলিতে আপনার মন্তব্য কেন হয় না ?? প্রস্থান () ঠিক আমার যা প্রয়োজন তা ছিল। অন্য উপায়, একটি অটোকল লুপ চালানো হয়, 1599 বার চালানো হবে তারপর কার্যকর করা বন্ধ করুন। ধন্যবাদ.
m3nda

@ অ্যাড্রিয়ানমায়ার আপনার হৃদয় ঠিক জায়গায় আছে তবে কোনও প্রশ্নের "কেন" সমস্যা হওয়া উচিত নয়। খারাপ die, goto, eval, ইত্যাদি অপরিসীম গিলে নেওয়া হয় (এবং মেধার ছাড়া হয় না), কিন্তু তারা সব তাদের বিশেষ ব্যবহার আছে, বিশেষ করে নিম্ন স্তরের ডিবাগিং জন্য। অন্যথায় ভাষা সেগুলি অন্তর্ভুক্ত করবে না। এই ক্ষেত্রে, জেএস সমতুল্য returnএবং throwযথেষ্ট নিরপেক্ষ।
বিজোর

উত্তর:


34

আপনি breakযদি এটি লেবেল করেন তবে আপনি কেবল একটি ব্লক স্কোপ করতে পারেন। উদাহরণ স্বরূপ:

myBlock: {
  var a = 0;
  break myBlock;
  a = 1; // this is never run
};
a === 0;

সুযোগের কোনও কার্যের মধ্যে থেকে আপনি কোনও ব্লক স্কোপটি ভাঙ্গতে পারবেন না। এর অর্থ আপনি এই জাতীয় জিনিসগুলি করতে পারবেন না:

foo: { // this doesn't work
  (function() {
    break foo;
  }());
}

আপনি ফাংশন সহ যদিও অনুরূপ কিছু করতে পারেন:

function myFunction() {myFunction:{
  // you can now use break myFunction; instead of return;
}}

5
ব্লকের স্কোপ লেবেল করার বিষয়ে আমি কখনই জানতাম না কোনও ব্লক স্কোপ লিখতে হবে less এর অর্থ কি এটি foo: {}একটি বস্তু?
শৃঙ্খলাবদ্ধ

4
না এটি একটি ব্লক সুযোগ। এটি একইfoo: if(true){...}
এলি গ্রে

আপনি "সুযোগের মধ্যে একটি কার্যকারিতা থেকে একটি ব্লক সুযোগ ভাঙ্গতে" না পারেন যেহেতু কোন বিকল্প আছে?
হাইকাম

210
throw new Error("my error message");

7
এটি একেবারে উত্তর এবং ডাইয়ের মতো কাজ করে (); তবে ফায়ারব্যাগের "1 ত্রুটি" রেডের যত্ন নেওয়া উচিত নয়!
অ্যালেক্সার

4
আমি মনে করি পিএইচপি-র যদি "ফায়ারব্যাগ" সমতুল্য হয় তবে এটি ডাই () ;-); ")-তেও "1 ত্রুটি" লিখতে হবে!
অ্যাড্রিয়ান মায়ার

4
আইই 8-এ এটি কোনও সতর্কতা সংলাপ বাক্স তৈরি করবে না?
sbichenko

1-থেকে -1 সমতুল্য নয়, যেহেতু পিএইচপি খুব ব্যতিক্রম রয়েছে unc
ব্রিলিয়ান্ড

এটি সম্পূর্ণরূপে আফাইককে কার্যকর করা বন্ধ করবে না, কেবল প্রায় ছোঁড়াছুড়ি করবে। বৈশিষ্টগুলি খুব ঝাপসা হয় তবে আমি নিশ্চিত যে স্ক্রিপ্টটি অন্য কোথাও চলতে পারে।
রলফ

22

আপনি কেবল return;উদাহরণটি ব্যবহার করতে পারেন

$(document).ready(function () {
        alert(1);
        return;
        alert(2);
        alert(3);
        alert(4);
});

রিটার্নটি মূল কলার ফাংশন টেস্ট 1 () এ ফিরে আসবে; এবং সেখান থেকে পরীক্ষা 3 () এ চালিয়ে যান;

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<script type="text/javascript">
function test1(){
    test2();
    test3();
}

function test2(){
    alert(2);
    return;
    test4();
    test5();
}

function test3(){
    alert(3);
}

function test4(){
    alert(4);
}

function test5(){
    alert(5);
}
test1();

</script>
</body>
</html>

তবে আপনি যদি কেবল 'থ্রো' যোগ করেন তবে; এটি কোনও ত্রুটি সৃষ্টি না করে পুরোপুরি কার্যকর করা বন্ধ করবে।

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<script type="text/javascript">
function test1(){
    test2();
    test3();
}

function test2(){
    alert(2);
    throw '';   
    test4();
    test5();
}

function test3(){
    alert(3);
}

function test4(){
    alert(4);
}

function test5(){
    alert(5);
}
test1();

</script>
</body>
</html>

এটি ফায়ারফক্স এবং ক্রোম দিয়ে পরীক্ষা করা হয়। আমি জানি না কীভাবে এটি আইআই বা সাফারি পরিচালনা করে


4
যতদূর আমি জানি, returnকেবল এনক্লোজিং ফাংশনটিই প্রস্থান করে। আপনি পুরো স্ক্রিপ্টটি চালানো বন্ধ করতে চাইলে এটি কাজ করে না।
আন্দ্রে লেরিয়া

4
হুঁ হ্যাঁ আপনি ঠিক বলেছেন, এটি সমস্ত স্ক্রিপ্টের সম্পাদন থামায় না।
themhz

throw "": ... কোনও ত্রুটি সৃষ্টি না করে ...Uncaught ""
এফজেডস

15

die()কখনও এটি সংজ্ঞায়িত না করে কল করুন । আপনার স্ক্রিপ্ট ক্রাশ হবে। :)

যখন আমি এটি করি, আমি সাধারণত discombobulate()পরিবর্তে কল করি তবে নীতিটি একই।

(প্রকৃতপক্ষে, ReferenceErrorএটি যা করে তা হ'ল এটিকে স্পুডির উত্তর হিসাবে প্রায় একই রকম করে তোলে - তবে এটি ডিবাগিংয়ের উদ্দেশ্যে টাইপ করা সংক্ষিপ্ত।)


একটি কাস্টম অপরিজ্ঞাত শনাক্তকারী ব্যবহার খুব সৃজনশীল! আমি পছন্দ করি কিভাবে dieস্বজ্ঞাত এবং সংক্ষিপ্ত। throwনির্দিষ্ট ত্রুটি বার্তায় লগ করার ক্ষেত্রে এর কোনও লাভ নেই , তবে কখনও কখনও কেবল লাইন নম্বরই যথেষ্ট। বিটিডাব্লু, die;প্রথম বন্ধনী (আন-) ছাড়াও কাজ করে।
বিজোর

বা সবে মারা; আপনি যে জাভাস্ক্রিপ্টটি থামাতে চান সেই লাইনে।
মার্কোজেন

এই উত্তরটি তাই জেএসের মনের ^^ এটি যদি কাজ করে তবে ময়লা না!
ইয়োন ট্রিমোরো

9

আপনি যদি নোডেজ ব্যবহার করছেন তবে আপনি এটি ব্যবহার করতে পারেন

process.exit(<code>);

4
যদি এটি Node.js সম্পর্কে হবে, প্রশ্ন ট্যাগ হবে Node.js
FelixSFD

4
@ ফেলিক্স এসএফডি: তবুও এটি আমাকে সহায়তা করেছিল, কারণ আমি ট্যাগগুলি পুরোপুরি উপেক্ষা করে ঠিক এটি অনুসন্ধান করছি;)
ডি

7

পিএইচপি'র ডাইয়ের নিজস্ব সংস্করণটি রোল করা সম্ভব:

function die(msg)
{
    throw msg;
}

function test(arg1)
{
    arg1 = arg1 || die("arg1 is missing"); 
}

test();

জেএসফিডাল উদাহরণ


আমি উল্লেখ করতে চেয়েছিলাম যে এটি এর মতো কাজ করে না var a = arguments[3] || die('message')। পরিবর্তে, আমার function die(msg) { return eval(`throw "${msg}"`);)মতে মরা হওয়া উচিত বলে মনে হয়: তবে তারপরেও, আমার মনে হয় এটি ব্রেক করা লাইনে খুব শক্তভাবে স্থাপন করা উচিত যাতে ত্রুটিটি দেখায় যে কোন লাইনটি ব্যর্থ হয়েছে, যেমন this.inputFile = argv[2] || eval('throw "this program requires an input file."');
দিমিত্রি

সম্ভবত, নিশ্চিত নয় যে eval () সমস্যাটি সমাধান করে যদি আমি আপনাকে বুঝতে পারি। আদর্শভাবে একজন স্ট্যাকের সন্ধানের দিকে তাকিয়ে থাকবে যদি আপনি আগ্রহী হন যেখানে ব্যর্থতা আসলে ব্যয় হচ্ছে oc অন্যথায় আমি এটি নিরাপদ বলে মনে করব যে আপনি কেবল আপনার ব্যবহারকারীর জন্য কোনও ধরণের বেসিক ব্যর্থতার বার্তাটি রিপোর্ট করতে চান।
কেলমার

3

ফায়ারব্যাগ এবং গৌরবময় ব্যবহার করুন ...

debugger;

এবং ডিবাগরটিকে কখনই কোনও পদক্ষেপ না নিতে দিন। একটি সঠিক Error, সহজাত নিক্ষেপ চেয়ে পরিষ্কার ?


4
ঠিক এক রকম নয়!
রলফ

2

জাভাস্ক্রিপ্টেdie পিএইচপি ভাষা নির্ধারণের সঠিক কোনও সমতুল্য নেই । পিএইচপি তে জাভাতে বেশ সমান , যা বর্তমান স্ক্রিপ্টটি বন্ধ করে দেয় এবং শাটডাউন হুকগুলিকে কল করে। কিছু ব্যবহারকারী পরামর্শ হিসাবে; কিছু ক্ষেত্রে ব্যবহার করা যেতে পারে, তবে এটি বর্তমান স্ক্রিপ্টের সমাপ্তির নিশ্চয়তা দেয় না। আপনার বক্তব্যকে ঘিরে সর্বদা একটি ব্যতিক্রম হ্যান্ডলিং ব্লক থাকতে পারে- যদি আপনি এটিকে শীর্ষ সর্বাধিক স্তরের স্ক্রিপ্ট ব্লকে কল না করেন যা অবশেষে কেবলমাত্র আপনি সম্পাদিত স্ক্রিপ্ট ব্লকটি থেকে বেরিয়ে আসেন।dieSystem.exit()throw Errorthrow

তবে এটি দ্বিতীয় ব্লকটি এখানে মৃত্যুদন্ড কার্যকর করা থেকে বিরত রাখবে না (হ্যালো প্রিন্ট করে):

<script type="text/javascript">
  throw new Error('test');
</script>
<script type="text/javascript">
  document.write("hello");
</script> 

2

জেএসে পিএইচপি ডাই () এর সমত কোনও ফাংশন প্রস্থান নেই, আপনি যদি কোনও ফাংশন ব্যবহার না করেন তবে আপনি কেবল রিটার্ন ব্যবহার করতে পারেন;

return;


0

আপনি রিটার্ন মিথ্যা ব্যবহার করতে পারেন; এটি আপনার স্ক্রিপ্টটি শেষ করবে।


4
কেবলমাত্র শীর্ষ স্তরে, সম্ভবতঃ। পিএইচপি-র ডাই () কে যে কোনও স্তরে কল করা যেতে পারে এবং পিএইচপি দোভাষীকে ঠিক সেখানে চলে যেতে বাধ্য করে।
রল্ফ

0

এটি ডাইয়ের মতো কাজ করা উচিত ();

function die(msg = ''){
    if(msg){
        document.getElementsByTagName('html')[0].innerHTML = msg;
    }else{
        document.open();
        document.write(msg);
        document.close();
    }
    throw msg;
}

0

উন্নয়ন উদ্দেশ্যে গ্লোবাল ডাই () ফাংশন:

var die = function(msg) {
    throw new Error(msg);
}

ডাই () ব্যবহার করুন:

die('Error message here');

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.