javascript জাভাস্ক্রিপ্টে কি "কঠোর ব্যবহার" করে এবং এর পিছনে যুক্তি কি?




syntax jslint (20)

সম্প্রতি, JSLint এর মাধ্যমে আমি আমার কিছু জাভাস্ক্রিপ্ট কোড চালাচ্ছি, এবং এটি নিম্নলিখিত ত্রুটিটি দিয়েছে:

লাইন 1 চরিত্র 1 এ সমস্যা: অনুপস্থিত "কঠোর ব্যবহার" বিবৃতি।

কিছু অনুসন্ধান করছেন, আমি বুঝতে পেরেছি যে কিছু লোক "use strict"; যোগ করে "use strict"; তাদের জাভাস্ক্রিপ্ট কোড মধ্যে। একবার আমি বিবৃতি যোগ করলে, ত্রুটিটি দেখা বন্ধ হয়ে গেল। দুর্ভাগ্যক্রমে, গুগল এই স্ট্রিং বিবৃতি পিছনে ইতিহাস অনেক প্রকাশ করে না। অবশ্যই ব্রাউজার দ্বারা জাভাস্ক্রিপ্টকে কীভাবে ব্যাখ্যা করা যায় তার সাথে কিছু করার আছে, তবে আমার কোন ধারণা নেই যে এর প্রভাব কী হবে।

তাই "use strict"; কি "use strict"; সব সম্পর্কে, এটা কি বোঝায়, এবং এটা এখনও প্রাসঙ্গিক?

বর্তমান ব্রাউজারগুলির "use strict"; সাড়া দেয় "use strict"; স্ট্রিং বা ভবিষ্যতে ব্যবহারের জন্য এটা?


তুলনা করার জন্য ছোট উদাহরণ:

অ কঠোর মোড:

for (i of [1,2,3]) console.log(i)

// output:
// 1
// 2
// 3

কঠোর মোড:

'use strict';
for (i of [1,2,3]) console.log(i)

// output:
// Uncaught ReferenceError: i is not defined

use strict আপনার কোডটি নিরাপদ করার একটি উপায়, কারণ আপনি বিপজ্জনক বৈশিষ্ট্যগুলি ব্যবহার করতে পারবেন না যা আপনার প্রত্যাশা অনুযায়ী কাজ করতে পারে না। এবং কোডটি আরও কঠোর করে তুলার আগেই এটি লেখার মতো ছিল।


"কঠোর ব্যবহার করুন"; একটি বীমা যে প্রোগ্রামার জাভাস্ক্রিপ্ট আলগা বা খারাপ বৈশিষ্ট্য ব্যবহার করবে না। এটি একটি নির্দেশিকা, ঠিক যেমন একজন শাসক আপনাকে সোজা রেখা তৈরি করতে সহায়তা করবে। "কঠোর ব্যবহার করুন" আপনাকে "সরাসরি কোডিং" করতে সহায়তা করবে।

যারা তাদের লাইনগুলি করার জন্য শাসকদের ব্যবহার করতে পছন্দ করে না সেগুলি সাধারণত সেই পৃষ্ঠাগুলির মধ্যে শেষ হয় যা অন্যদের কাছে তাদের কোড ডিবাগ করার জন্য জিজ্ঞাসা করে।

আমাকে বিশ্বাস কর. ওভারহেড খারাপভাবে পরিকল্পিত কোড তুলনায় নগণ্য। ডগ ক্রকফোর্ড, যিনি বেশ কয়েক বছর ধরে জ্যেষ্ঠ জাভাস্ক্রিপ্ট ডেভেলপার ছিলেন, এখানে একটি খুব আকর্ষণীয় পোস্ট রয়েছে । ব্যক্তিগতভাবে, আমি নিশ্চিত যে আমি আমার ভাল অভ্যাস ভুলে যাব না তা নিশ্চিত করার জন্য সর্বদা তার সাইটে ফিরে যেতে চাই।

আধুনিক জাভাস্ক্রিপ্ট অনুশীলন সবসময় "কঠোর ব্যবহার করুন" উচ্চারণ করা উচিত; pragma। ইসিএমএ গ্রুপের "স্ট্রিক্ট" মোড ঐচ্ছিক করার একমাত্র কারণ হল কম অভিজ্ঞ কোডারদের জাভাস্ক্রিপ্ট অ্যাক্সেসের অনুমতি দেওয়া এবং নতুন এবং নিরাপদ কোডিং অনুশীলনের সাথে মানিয়ে নিতে সময় দিতে।


আমি অন্য উত্তর পরিপূরক একটি কিছুটা আরো প্রতিষ্ঠিত উত্তর দিতে চাই। আমি সবচেয়ে জনপ্রিয় উত্তর সম্পাদনা করার আশা ছিল, কিন্তু ব্যর্থ হয়েছে। আমি এটা হিসাবে ব্যাপক এবং সম্পূর্ণ হিসাবে এটি করতে চেষ্টা করেছিলাম।

আপনি আরও তথ্যের জন্য MDN ডকুমেন্টেশন উল্লেখ করতে পারেন।

"use strict" ECMAScript 5 এ উপস্থাপিত নির্দেশিকা।

নির্দেশাবলী বিবৃতি অনুরূপ, এখনো ভিন্ন।

  • use strict শব্দগুলি ধারণ করে না: নির্দেশিকা একটি সাধারণ অভিব্যক্তি বিবৃতি, যা একটি বিশেষ স্ট্রিং আক্ষরিক (একক বা ডবল উদ্ধৃতিতে) রয়েছে। জাভাস্ক্রিপ্ট ইঞ্জিনগুলি, যা ECMAScript 5 প্রয়োগ করে না, কেবল পার্শ্ব প্রতিক্রিয়া ছাড়াই একটি অভিব্যক্তি বিবৃতিটি দেখায়। এটি প্রত্যাশিত যে ECMAScript মানগুলির ভবিষ্যত সংস্করণগুলি সত্যিকারের কী শব্দ হিসেবে use ; কোথাও অপ্রচলিত হয়ে যাবে।
  • use strict ব্যবহার শুধুমাত্র একটি স্ক্রিপ্ট বা একটি ফাংশনের শুরুতে ব্যবহার করা যেতে পারে, অর্থাত্ এটি প্রতিটি অন্যান্য (বাস্তব) বিবৃতি পূর্ববর্তী হতে হবে। এটি ফাংশনের একটি স্ক্রিপ্টে প্রথম নির্দেশনা হতে হবে না: এটি স্ট্রিং লিটারালগুলির (এবং জাভাস্ক্রিপ্ট বাস্তবায়নগুলি তাদের বাস্তবায়ন নির্দিষ্ট নির্দেশাবলী হিসাবে ব্যবহার করতে পারে) সহ অন্যান্য বিবৃতি এক্সপ্রেশন দ্বারা পূর্ববর্তী হতে পারে। স্ট্রিং লিটারেল স্টেটমেন্ট, যা একটি প্রথম বাস্তব বিবৃতি অনুসরণ করে (একটি স্ক্রিপ্ট বা ফাংশন) সহজ অভিব্যক্তি বিবৃতি। ইন্টারপ্রেটারদের নির্দেশনা হিসাবে তাদের ব্যাখ্যা করা উচিত নয় এবং তাদের কোন প্রভাব নেই।

use strict নির্দেশনা নির্দেশ করে যে নিম্নলিখিত কোড (একটি স্ক্রিপ্ট বা একটি ফাংশন) কঠোর কোড। একটি স্ক্রিপ্টের সর্বোচ্চ স্তরের কোড (কোনও ফাংশনে নয় এমন কোড) কোডটি use strict নির্দেশিকা use strict যখন কঠোর কোড হিসাবে বিবেচিত হয়। যখন ফাংশনটি নিজেই কঠোর কোডে সংজ্ঞায়িত হয় বা ফাংশনে কোনও use strict নির্দেশনা থাকে তখন একটি ফাংশনের সামগ্রী কঠোর কোড বলে মনে করা হয়। eval() পদ্ধতিতে প্রেরিত eval() কঠোর কোড বলে মনে করা হয় যখন eval() কঠোর কোড থেকে বলা হয় বা use strict নির্দেশিকা use strict করে।

ECMAScript 5 এর কঠোর মোড জাভাস্ক্রিপ্ট ভাষার একটি সীমাবদ্ধ উপসেট যা ভাষা সম্পর্কিত প্রাসঙ্গিক ঘাটতিগুলিকে বাদ দেয় এবং আরও কঠোর ত্রুটি পরীক্ষা এবং উচ্চ সুরক্ষা দেয়। নিম্নলিখিত কঠোর মোড এবং স্বাভাবিক মোডে (যা প্রথম তিনটি বিশেষ করে গুরুত্বপূর্ণ) মধ্যে পার্থক্য তালিকাভুক্ত করা হয়:

  • আপনি কঠোর মোড with স্ট্যাটাস ব্যবহার করতে পারবেন না।
  • কঠোর মোডে সমস্ত ভেরিয়েবলগুলি ঘোষণা করতে হবে: যদি আপনি একটি সনাক্তকারীকে একটি মান বরাদ্দ করেন যা পরিবর্তনশীল, ফাংশন, ফাংশন প্যারামিটার, ক্যাচ-ক্লজ প্যারামিটার বা গ্লোবাল Object সম্পত্তি হিসাবে ঘোষণা করা হয় না, তবে আপনি একটি ReferenceError । স্বাভাবিক মোডে সনাক্তকারীটি বিশ্বব্যাপী পরিবর্তনশীল হিসাবে ঘোষিত হয় (গ্লোবাল Object সম্পত্তি হিসাবে)
  • কঠোর মোডে কীওয়ার্ডের কার্যকারিতাগুলির মধ্যে undefined মান রয়েছে যা ফাংশন হিসাবে প্রয়োগ করা হয়েছে (পদ্ধতি হিসাবে নয়)। (স্বাভাবিক মোডে this সবসময় গ্লোবাল Object )। একটি বাস্তবায়ন কঠোর মোড সমর্থন করে কিনা এই পার্থক্য পরীক্ষা করতে ব্যবহার করা যেতে পারে:
var hasStrictMode = (function() { "use strict"; return this===undefined }());
  • এছাড়াও যখন কোনও ফাংশন call() বা কঠোর মোডে apply হয় তখন এটি call() বা apply() আমন্ত্রণের প্রথম যুক্তিটির ঠিক মূল্য। (স্বাভাবিক মোডে null এবং undefined বস্তুগুলি গ্লোবাল Object এবং মানগুলি দ্বারা প্রতিস্থাপিত হয় যা বস্তু নয়, বস্তুগুলিতে নিক্ষেপ করা হয়।)

  • কঠোর মোডে আপনি একটি TypeError , যখন আপনি কেবলমাত্র পঠনযোগ্য বৈশিষ্ট্যাবলী বরাদ্দ করার চেষ্টা করেন বা একটি এক্সটেনসিবল বস্তুর জন্য নতুন বৈশিষ্ট্য সংজ্ঞায়িত করেন। (স্বাভাবিক মোডে উভয় ত্রুটি বার্তা ছাড়া কেবল ব্যর্থ।)

  • কঠোর মোডে, eval() কোডটি পাস করার সময়, আপনি কলারের সুযোগে ভেরিয়েবল বা ফাংশনগুলি ঘোষণা বা সংজ্ঞায়িত করতে পারবেন না (যেমন আপনি এটি স্বাভাবিক মোডে করতে পারেন)। পরিবর্তে, eval() জন্য একটি নতুন সুযোগ তৈরি করা হয়েছে এবং ভেরিয়েবল এবং ফাংশন সেই সুযোগের মধ্যে রয়েছে। eval() শেষ হওয়ার পরে যে সুযোগ ধ্বংস হয়।
  • কঠোর মোডে আর্গুমেন্ট-একটি ফাংশনের বস্তুর মানগুলির স্ট্যাটিক অনুলিপি থাকে, যা সেই ফাংশনে প্রেরিত হয়। স্বাভাবিক মোডে আর্গুমেন্ট-বস্তুর কিছুটা "জাদুকরী" আচরণ রয়েছে: অ্যারের উপাদান এবং নামযুক্ত ফাংশন পরামিতি একই মান উভয়ের উল্লেখ করে।
  • কঠোর মোডে আপনি একটি SyntaxError যখন delete অপারেটরটি একটি অ যোগ্যতাসম্পন্ন সনাক্তকারী (একটি পরিবর্তনশীল, ফাংশন বা ফাংশন প্যারামিটার) অনুসরণ করে। স্বাভাবিক মোডে delete এক্সপ্রেশন কিছুই করবে না এবং false মূল্যায়ন করা হবে।
  • যখন আপনি কোনও কনফিগারযোগ্য সম্পত্তিকে মুছতে চান তখন কঠোর মোডে আপনি একটি TypeError পাবেন। (স্বাভাবিক মোডে প্রচেষ্টাটি কেবল ব্যর্থ হয় এবং delete অভিব্যক্তি false মূল্যায়ন করা হয়)।
  • কঠোর মোডে এটি একটি বাক্যযুক্ত ত্রুটি বলে মনে করা হয় যখন আপনি একটি বস্তুর আক্ষরিক জন্য একই নামের সাথে কয়েকটি বৈশিষ্ট্য সংজ্ঞায়িত করার চেষ্টা করেন। (স্বাভাবিক মোডে কোন ত্রুটি নেই।)
  • কঠোর মোডে এটি একটি সিনট্যাক্টিক ত্রুটি বলে মনে করা হয় যখন একটি ফাংশন ঘোষণার একই নামের সাথে একাধিক পরামিতি থাকে। (স্বাভাবিক মোডে কোন ত্রুটি নেই।)
  • কঠোর মোড অকটাল লিখনগুলিতে অনুমতি দেওয়া হয় না (এইগুলি শব্দের যে 0x দিয়ে শুরু হয়। (স্বাভাবিক মোডে কিছু বাস্তবায়ন অকটাল লিটারেলগুলিকে মঞ্জুরি দেয়।)
  • কঠোর মোডে সনাক্তকারী eval এবং arguments কীওয়ার্ড মত চিকিত্সা করা হয়। আপনি তাদের মান পরিবর্তন করতে পারবেন না, তাদের জন্য একটি মান বরাদ্দ করতে পারবেন না এবং আপনি ভেরিয়েবল, ফাংশন, ফাংশন প্যারামিটার বা ক্যাচ ব্লকের শনাক্তকারীগুলির জন্য তাদের নাম হিসাবে ব্যবহার করতে পারবেন না।
  • কঠোর মোডে কল স্ট্যাক পরীক্ষা করার সম্ভাবনার উপর আরো বিধিনিষেধ রয়েছে। arguments.caller এবং arguments.callee কঠোর মোডে একটি ফাংশনে একটি TypeError সৃষ্টি করে। উপরন্তু, কিছু কলকারী- এবং কঠোর মোডে ফাংশনগুলির আর্গুমেন্ট বৈশিষ্ট্যগুলি যখন আপনি তাদের পড়ার চেষ্টা করেন তখন টাইপঅররর সৃষ্টি করে।

সাবধানতার একটি শব্দ, আপনি হার্ড-চার্জিং প্রোগ্রামারদের: বিদ্যমান কোডে "use strict" প্রয়োগ করা বিপজ্জনক হতে পারে! এই জিনিসটা কিছুটা ভাল-সুখী, মুখোমুখি স্টিকার নয় যা আপনাকে 'ভাল' করতে কোডটিতে চাপ দিতে পারে। "use strict" প্রগমা দিয়ে, ব্রাউজারটি হঠাৎ করে এলোমেলো জায়গায় ব্যতিক্রমগুলি হ্রাস পাবে যা এটি আগে কখনও ছুঁড়ে ফেলেনি কারণ সেই স্থানে আপনি ডিফল্ট / আলিঙ্গন জাভাস্ক্রিপ্টটি আনন্দের সাথে অনুমতি দেয় তবে কঠোরভাবে জাভাস্ক্রিপ্ট অ্যাবোর্স করে! আপনার কোডে কদাচিৎ ব্যবহৃত কলগুলির মধ্যে লুকানো কঠোরতা লঙ্ঘন থাকতে পারে যা আপনার অবদান গ্রাহকদের ব্যবহার করার পরিবেশের পরিবেশে কেবল তখনই ব্যতিক্রম হয়ে যাবে যখন এটি শেষ হয়ে যাবে!

আপনি যদি মুচলেকা নিতে যাচ্ছেন তবে ব্যাপক ইউনিট পরীক্ষাগুলি এবং কঠোরভাবে কনফিগার করা JSHint বিল্ড টাস্কের পাশাপাশি "use strict" প্রয়োগ করা একটি ভাল ধারণা যা আপনার মডিউলের কোন অন্ধকার কোণায় নেই এমন কিছু আস্থা দেবে ভয়ঙ্করভাবেই আপনি কঠোর মোড চালু করেছেন। অথবা, হেই, এখানে আরেকটি বিকল্প রয়েছে: আপনার লিগ্যাসি "use strict" করুন "use strict" যোগ করবেন না, এটি সম্ভবত নিরাপদ, যেভাবেই নিরাপদ। নিশ্চিতভাবে আপনি তৃতীয় পক্ষের মডিউলগুলির মতো মালিকানা বা বজায় রাখার যে কোনও মডিউলগুলিতে "use strict" করুন "use strict" যোগ করবেন না

আমি মনে করি এটি একটি মারাত্মক caged প্রাণী যদিও, "use strict" ভাল জিনিস হতে পারে, কিন্তু আপনি এটা ঠিক করতে হবে। আপনার প্রকল্পের সবুজক্ষেত্র এবং আপনি স্ক্র্যাচ থেকে শুরু করা হয় যখন কঠোর যেতে সেরা সময়। JSHint/JSLint কনফিগার করুন সমস্ত JSHint/JSLint এবং বিকল্পগুলি আপনার টিমের পেট হিসাবে শক্ত করে ক্র্যাঁকড হয়ে যাবে, ভাল নির্মাণ / পরীক্ষা / জোরালো সিস্টেম du jour Grunt+Karma+Chai মত দমন করে এবং শুধুমাত্র তখনই আপনার সমস্ত নতুন মডিউল চিহ্নিত করা শুরু করুন "use strict" । Niggly ত্রুটি এবং সতর্কতা প্রচুর নিরাময় প্রস্তুত করা। যদি JSHint/JSLint কোনও লঙ্ঘন তৈরি করে তবে এটি স্থির করতে ব্যর্থ হওয়ায় প্রত্যেকটি গুরুতরতা বুঝতে পারে।

আমি "use strict" গ্রহণ করার সময় আমার প্রকল্পটি একটি গ্রিনফিল্ড প্রকল্প ছিল না। ফলস্বরূপ, আমার আইডিই রেড মার্ক দিয়ে পূর্ণ কারণ আমার অর্ধেক মডিউলগুলিতে "use strict" না এবং JSHint তার সম্পর্কে অভিযোগ করে। এটা আমার কাছে একটি অনুস্মারক যা ভবিষ্যতে আমাকে কী করতে হবে তা নিয়ে প্রতিক্রিয়া জানাতে হবে। আমার লক্ষ্যটি আমার অনুপস্থিত "use strict" বিবৃতিগুলির কারণে বিনামূল্যে লাল চিহ্নিত হওয়া, তবে এটি এখন অনেক বছর দূরে।


ডেভেলপারদের কেন ব্যবহার করা উচিত তা প্রধান কারণ "use strict":

  1. গ্লোবাল ভেরিয়েবলের আপতিক ঘোষনা প্রতিরোধ করে । ব্যবহার "use strict()"করার varআগে ভেরিয়েবল ঘোষণা করা হবে তা নিশ্চিত করবে । উদাহরণ:

    function useStrictDemo(){
     'use strict';
     //works fine
     var a = 'No Problem';
    
     //does not work fine and throws error
     k = "problem"
    
     //even this will throw error
     someObject = {'problem': 'lot of problem'};
    }
    
  2. NB: "use strict"নির্দেশনা শুধুমাত্র একটি স্ক্রিপ্ট বা একটি ফাংশনের শুরুতে স্বীকৃত হয়।
  3. স্ট্রিং "arguments"একটি পরিবর্তনশীল হিসাবে ব্যবহার করা যাবে না:

    "use strict";
    var arguments = 3.14;    // This will cause an error
    
  4. ভেরিয়েবল হিসাবে কীওয়ার্ড ব্যবহার সীমিত করা হবে। তাদের ব্যবহার করার চেষ্টা করছেন ভুল নিক্ষেপ করা হবে।

সংক্ষেপে আপনার কোড কম ত্রুটি প্রবণ করা এবং ঘুরে আপনি ভাল কোড লিখতে হবে।

এটি সম্পর্কে আরও পড়তে আপনি এখানে উল্লেখ করতে পারেন ।


জাভাস্ক্রিপ্ট "কঠোর" মোড ECMAScript 5 এ উপস্থাপিত হয়।

  (function() {
  "use strict";
   your code...
   })();

লেখার "কঠোর ব্যবহার"; আপনার জেএস ফাইল খুব শীর্ষে কঠোর সিনট্যাক্স চেক সক্রিয়। এটা আমাদের জন্য নিম্নলিখিত কাজ করে:

(i) যদি আপনি একটি undclclared পরিবর্তনশীল বরাদ্দ করার চেষ্টা করেন তাহলে একটি ত্রুটি দেখায়

(ii) আপনাকে কী JS সিস্টেম লাইব্রেরিগুলি ওভাররাইটিং থেকে থামিয়ে দেয়

(ii) কিছু অনিরাপদ বা ত্রুটি-প্রবণ ভাষা বৈশিষ্ট্য নিষিদ্ধ করে

"কঠোর ব্যবহার করুন" এছাড়াও পৃথক ফাংশন ভিতরে কাজ করে। এটি সর্বদা "আপনার কোড কঠোর ব্যবহার অন্তর্ভুক্ত করার জন্য একটি ভাল অনুশীলন।

ব্রাউজার সামঞ্জস্যতা সমস্যা: "ব্যবহার" নির্দেশাবলী পিছনে-সামঞ্জস্যপূর্ণ হতে বোঝানো হয়। ব্রাউজারগুলি যে তাদের সমর্থন দেয় না কেবল একটি স্ট্রিং আক্ষরিক দেখতে পাবে যা আরও উল্লেখ করা হয় না। সুতরাং, তারা এটা অতিক্রম এবং চলতে হবে।


বিবৃতি "use strict"; ব্রাউজারকে স্ট্রিক মোড ব্যবহার করার নির্দেশ দেয়, যা জাভাস্ক্রিপ্টের একটি কম এবং নিরাপদ বৈশিষ্ট্য সেট।

বৈশিষ্ট্য তালিকা (অ-সম্পূর্ণ)

  1. গ্লোবাল ভেরিয়েবল নিষিদ্ধ। (ক্যাভারে ভেরিয়েবল নামের মধ্যে var ঘোষণা এবং টাইপস অনুপস্থিত)

  2. নীরব ব্যর্থ নিয়োগগুলি কঠোর মোডে ত্রুটি নিক্ষেপ করবে ( NaN = 5; বরাদ্দকরণ)

  3. Undeletable বৈশিষ্ট্য মুছে ফেলার প্রচেষ্টা নিক্ষেপ করা হবে ( delete Object.prototype )

  4. একটি বস্তুর আক্ষরিক সমস্ত সম্পত্তি নামগুলি অনন্য হতে হবে ( var x = {x1: "1", x1: "2"} )

  5. ফাংশন পরামিতি নাম অনন্য হতে হবে ( function sum (x, x) {...} )

  6. ফরবিডস অকটাল সিনট্যাক্স ( var x = 023; কিছু devs wrongly অনুমান করে যে পূর্ববর্তী শূন্য সংখ্যা পরিবর্তন করতে কিছুই করে না।)

  7. শব্দ with ফোর্বস

  8. কঠোর মোডে eval নতুন ভেরিয়েবল পরিচয় করিয়ে না

  9. ফ্লোবিড প্লেইন নাম মুছে ফেলা ( delete x; )

  10. কোন ফর্মের নামগুলি eval এবং arguments বাধ্যবাধকতা বা বরাদ্দকরণের জন্য eval

  11. কঠোর মোড আনুষ্ঠানিক পরামিতি সঙ্গে arguments বস্তুর উপনাম বৈশিষ্ট্য না। (অর্থাৎ function sum (a,b) { return arguments[0] + b;} এটি কাজ করে কারণ arguments[0] a এবং আরও কিছুতেই আবদ্ধ।)

  12. arguments.callee সমর্থিত নয়

[রেফারেন্স: কঠোর মোড , মোজিলা ডেভেলপার নেটওয়ার্ক ]


মানুষ use strict ব্যবহার use strict সম্পর্কে চিন্তিত হলে এটি এই নিবন্ধটি চেক আউট মূল্য হতে পারে:

ECMAScript 5 ব্রাউজারে 'কঠোর মোড' সমর্থন। এটার মানে কি?
NovoGeek.com - কৃষ্ণ এর ওয়েব্লগ

এটি ব্রাউজার সমর্থন সম্পর্কে আলোচনা করে, তবে আরো নিরাপদে এটির সাথে কীভাবে মোকাবিলা করতে হবে তা আরো গুরুত্বপূর্ণ:

function isStrictMode(){
    return !this;
} 
/*
   returns false, since 'this' refers to global object and 
   '!this' becomes false
*/

function isStrictMode(){   
    "use strict";
    return !this;
} 
/* 
   returns true, since in strict mode the keyword 'this'
   does not refer to global object, unlike traditional JS. 
   So here, 'this' is 'undefined' and '!this' becomes true.
*/

জাভাস্ক্রিপ্ট স্ট্রিক মোড সম্পর্কে এই নিবন্ধটি আপনাকে আগ্রহ হতে পারে: জন রেসিগ - ECMAScript 5 কঠোর মোড, JSON, এবং আরো

কিছু আকর্ষণীয় অংশ উদ্ধৃত করতে:

স্টিক্ট মোড ECMAScript 5 এ একটি নতুন বৈশিষ্ট্য যা আপনাকে একটি "কঠোর" অপারেটিং প্রেক্ষাপটে একটি প্রোগ্রাম, বা একটি ফাংশন স্থাপন করার অনুমতি দেয়। এই কঠোর প্রেক্ষাপটে কিছু কর্ম গ্রহণ করা থেকে বিরত এবং আরও ব্যতিক্রম ছুড়ে।

এবং:

কঠোর মোড একটি দম্পতি উপায় আউট সাহায্য করে:

  • এটা কিছু সাধারণ কোডিং bloopers ক্যাচ, ব্যতিক্রম নিক্ষেপ।
  • যখন এটি অপেক্ষাকৃত "অনিরাপদ" পদক্ষেপ নেওয়া হয় (যেমন গ্লোবাল অবজেক্টের অ্যাক্সেস অর্জন করে) তখন এটি বাধা দেয় বা ত্রুটিগুলি ছুঁড়ে ফেলে।
  • এটি বিভ্রান্তিকর বা খারাপভাবে চিন্তা করা এমন বৈশিষ্ট্যগুলিকে অক্ষম করে।

এছাড়াও নোট করুন যে আপনি পুরো ফাইলটিতে "কঠোর মোড" প্রয়োগ করতে পারেন ... অথবা আপনি এটি শুধুমাত্র একটি নির্দিষ্ট ফাংশনের জন্য ব্যবহার করতে পারেন (এখনও জন রেসিগের নিবন্ধ থেকে উদ্ধৃত) :

// Non-strict code...

(function(){
  "use strict";

  // Define your library strictly...
})();

// Non-strict code... 

আপনি পুরানো এবং নতুন কোড মিশ্রিত আছে, যা সহায়ক হতে পারে ;-)

সুতরাং, আমার মনে হয় এটি "use strict" আপনি পার্লে ব্যবহার করতে পারেন (তাই নাম?) : এটি আপনাকে বিরতির কারণ হতে পারে এমন আরও কিছু জিনিস সনাক্ত করে কম ত্রুটিগুলি করতে সহায়তা করে।

বর্তমানে, এটি সমস্ত প্রধান ব্রাউজার দ্বারা সমর্থিত (বার IE 9 এবং নীচে)


সাধারণত জাভা স্ক্রিপ্ট কঠোর নিয়ম অনুসরণ করে না তাই ভুলের সম্ভাবনা বৃদ্ধি করে। ব্যবহার করার পর "use strict", জাভা স্ক্রিপ্ট কোডটি অন্যান্য প্রোগ্রামিং ভাষা যেমন টার্মিনেটর ব্যবহার, সূচনা ইত্যাদির আগে ঘোষণার মতো নিয়মগুলির কঠোর সেট অনুসরণ করা উচিত।

যদি "use strict"ব্যবহার করা হয় তবে কোডগুলি কঠোর নিয়ম অনুসারে অনুসরণ করা উচিত যাতে ত্রুটি এবং অস্পষ্টতার সম্ভাবনা হ্রাস পায়।


আমি দৃঢ়ভাবে কঠোর মোড ব্যবহার শুরু করতে প্রত্যেক বিকাশকারী সুপারিশ। যথেষ্ট ব্রাউজার সমর্থন করে যে কঠোর মোড legitimately ত্রুটি থেকে আমাদের সংরক্ষণ করতে সাহায্য করবে আমরা এমনকি আপনার কোড ছিল জানি না।

দৃশ্যত, প্রাথমিক পর্যায়ে ত্রুটিগুলি আমরা আগে কখনও সম্মুখীন হইনি। সম্পূর্ণ বেনিফিট পেতে, কঠোর মোডে স্যুইচ করার পরে আমাদের যথাযথ পরীক্ষা করার দরকার আছে যাতে আমরা সবকিছু ধরা পড়ে থাকি। অবশ্যই আমরা আমাদের কোড use strict নিক্ষেপ না এবং অনুমান আছে কোন ত্রুটি আছে। সুতরাং মন্থরটি হল যে এই কোডটিকে দুর্দান্ত কোড লিখতে এই অবিশ্বাস্যভাবে দরকারী ভাষা বৈশিষ্ট্যটি ব্যবহার করা শুরু করা।

উদাহরণ স্বরূপ,

var person = {
    name : 'xyz',
    position : 'abc',
    fullname : function () {  "use strict"; return this.name; }
};

JSLint ডগলাস ক্রকফোর্ডের লেখা একটি ডিবাগার। শুধু আপনার স্ক্রিপ্টে পেস্ট করুন, এবং এটি দ্রুত আপনার কোডের কোনও নোটিশযোগ্য সমস্যা এবং ত্রুটিগুলির জন্য স্ক্যান করবে।


এটি ECMAScript 5 এর একটি নতুন বৈশিষ্ট্য। জন রেসিগ এটির একটি সুন্দর সারসংক্ষেপ লিখেছেন।

এটি কেবলমাত্র আপনার জাভাস্ক্রিপ্ট ফাইলগুলির মধ্যে একটি স্ট্রিং (আপনার ফাইলের শীর্ষে বা ফাংশনের ভেতরে) যা এটির মত দেখাচ্ছে:

"use strict";

আপনার কোড এ এটি নির্বাণ এখন এটি একটি স্ট্রিং হিসাবে বর্তমান ব্রাউজারের সঙ্গে কোনো সমস্যা হতে পারে না। যদি আপনার কোড প্রগমা লঙ্ঘন করে তবে ভবিষ্যতে আপনার কোডের সমস্যা হতে পারে। উদাহরণস্বরূপ, যদি আপনার বর্তমানে foo = "bar" প্রথমে foo সংজ্ঞায়িত না করে, আপনার কোডটি ব্যর্থ হতে শুরু করবে ... যা আমার মতামতের একটি ভাল জিনিস।


ইসিএমএসক্রিপ্ট কমিটিতে কিছু লোকের দ্বারা ভাল বক্তব্য রয়েছে: জাভাস্ক্রিপ্টে পরিবর্তন, অংশ 1: ​​ECMAScript 5 "এই সুইচটির ক্রমবর্ধমান ব্যবহার সম্পর্কে "use strict"জাভাস্ক্রিপ্ট প্রয়োগকারীরা জাভাস্ক্রিপ্টের অনেক বিপজ্জনক বৈশিষ্ট্যগুলি হঠাৎ করে প্রতিটি ওয়েবসাইট ভেঙে ছাড়ার অনুমতি দেয়। এ পৃথিবীতে.

অবশ্যই এটি এগুলির বেশিরভাগ অপব্যবহারের (সেগুলি) কী এবং ECMAScript 5 তাদের কীভাবে সংশোধন করে সে সম্পর্কেও আলোচনা করে।


আমার দুই সেন্ট:

কঠোর মোডের লক্ষ্যগুলির মধ্যে একটি হল সমস্যাগুলির দ্রুত ডিবাগিংয়ের অনুমতি। এটি যখন কিছু ভুল জিনিস ঘটবে তখন ব্যতিক্রমগুলি ফাঁস করে ডেভেলপারদের সহায়তা করে যা আপনার ওয়েবপৃষ্ঠার নীরব এবং অদ্ভুত আচরণ সৃষ্টি করতে পারে। যে মুহূর্তে আমরা use strict ব্যবহার করি, কোডটি ত্রুটিগুলি নিক্ষেপ করবে যা বিকাশকারীকে অগ্রিম সংশোধন করতে সহায়তা করে।

use strict ব্যবহার use strict পরে আমি শিখেছি এমন কিছু গুরুত্বপূর্ণ বিষয়:

গ্লোবাল ভেরিয়েবল ঘোষণাকে প্রতিরোধ করে:

var tree1Data = { name: 'Banana Tree',age: 100,leafCount: 100000};

function Tree(typeOfTree) {
    var age;
    var leafCount;

    age = typeOfTree.age;
    leafCount = typeOfTree.leafCount;
    nameoftree = typeOfTree.name;
};

var tree1 = new Tree(tree1Data);
console.log(window);

এখন, এই কোডটি গ্লোবাল সুযোগে nameoftree তৈরি করে যা window.nameoftree ব্যবহার করে অ্যাক্সেস করা যেতে পারে। আমরা use strict বাস্তবায়ন কোড কোড নিক্ষেপ করা হবে।

Uncaught রেফারেন্স ত্রুটি: নামoft্রি সংজ্ঞায়িত করা হয় না

Sample

বিবৃতি with নির্মূল

বিবৃতিগুলি uglify-js মত সরঞ্জাম ব্যবহার করে minified করা যাবে না। তারা deprecated এবং ভবিষ্যতে জাভাস্ক্রিপ্ট সংস্করণ থেকে মুছে ফেলা হয়।

Sample

Duplicates প্রতিরোধ করে:

যখন আমাদের সদৃশ সম্পত্তি থাকে, তখন এটি একটি ব্যতিক্রম ছুঁড়ে ফেলে

Uncaught সিনট্যাক্স ত্রুটি: বস্তু আক্ষরিক ডুপ্লিকেট ডাটা সম্পত্তি কঠোর মোডে অনুমোদিত নয়

"use strict";
var tree1Data = {
    name: 'Banana Tree',
    age: 100,
    leafCount: 100000,
    name:'Banana Tree'
};

আরো কিছু আছে তবে আমি আরও জ্ঞান অর্জন করতে হবে।


"কঠোর ব্যবহার করুন"; ইসিএমএ প্রচেষ্টাটি জাভাস্ক্রিপ্টটিকে একটু বেশি শক্তিশালী করে তুলতে হয়। এটি জেএসকে কমপক্ষে একটু "কঠোর" করার চেষ্টা করে (অন্যান্য ভাষাগুলি 90 এর দশকের পর থেকে কঠোর নিয়ম প্রয়োগ করে)। এটি আসলে জাভাস্ক্রিপ্ট ডেভালোপারদের "সর্বোত্তম অনুশীলন" কোডিংয়ের কিছুটা অনুসরণ করার জন্য "জোর দেয়"। এখনো, জাভাস্ক্রিপ্ট খুব ভঙ্গুর। টাইপ করা ভেরিয়েবল, টাইপ করা পদ্ধতি ইত্যাদি কোন জিনিস নেই। আমি জাভাস্ক্রিপ্ট ডেভেলপারদের জাভা বা অ্যাকশনস্ক্রিপ্টের মতো আরও শক্তিশালী ভাষা শিখতে পরামর্শ দিই এবং আপনার জাভাস্ক্রিপ্ট কোডের সর্বোত্তম অনুশীলনগুলি বাস্তবায়নের জন্য সুপারিশ করি, এটি আরও ভাল এবং সহজ হবে ডিবাগ।


"use strict"জাভাস্ক্রিপ্ট কোড কঠোর মোড চালানোর জন্য , যা মূলত সবকিছু ব্যবহারের আগে সংজ্ঞায়িত করা প্রয়োজন মানে। কঠোর মোড ব্যবহার করার প্রধান কারণ অনির্ধারিত পদ্ধতির আপতিক বিশ্বব্যাপী ব্যবহার এড়াতে হয়।

এছাড়াও কঠোর মোডে, জিনিসগুলি দ্রুততর হয়, কিছু সতর্কতা বা নীরব সতর্কতা মারাত্মক ত্রুটিগুলি নিক্ষেপ করে, এটি একটি নিটার কোড তৈরির জন্য সর্বদা এটি ব্যবহার করা ভাল।

"use strict"ইসিএমএ 5 তে ব্যাপকভাবে ব্যবহার করা প্রয়োজন, ECMA6 এ এটি ডিফল্টরূপে জাভাস্ক্রিপ্টের অংশ , সুতরাং যদি আপনি ES6 ব্যবহার করেন তবে এটি যোগ করার দরকার নেই।

MDN থেকে এই বিবৃতি এবং উদাহরণ দেখুন:

"কঠোর ব্যবহার করুন" নির্দেশিকা "কঠোর ব্যবহার করুন" নির্দেশিকাটি
JavaScript 1.8.5 (ECMAScript সংস্করণ 5) তে নতুন। এটি একটি বিবৃতি নয়, তবে একটি আক্ষরিক অভিব্যক্তি যা জাভাস্ক্রিপ্টের পূর্ববর্তী সংস্করণগুলি উপেক্ষা করে। "কঠোর ব্যবহার" এর উদ্দেশ্যটি নির্দেশ করে যে "কোডটি কঠোর মোডে" কার্যকর করা উচিত। কঠোর মোড দিয়ে, আপনি উদাহরণস্বরূপ, অনির্ধারিত ভেরিয়েবলগুলি ব্যবহার করতে পারবেন না।

"ব্যবহার কঠোর" ব্যবহার করার উদাহরণ:
ফাংশনগুলির জন্য কঠোর মোড: একইভাবে, একটি ফাংশনের জন্য কঠোর মোড আহ্বান করতে, সঠিক বিবৃতিটি "কঠোর ব্যবহার করুন" রাখুন; (বা 'কঠোর ব্যবহার করুন';) কোনও বিবৃতির আগে ফাংশনের দেহে।

1) ফাংশন কঠোর মোড

 function strict() {
     // Function-level strict mode syntax
     'use strict';
     function nested() { return 'And so am I!'; }
     return "Hi!  I'm a strict mode function!  " + nested();
 }
 function notStrict() { return "I'm not strict."; }

 console.log(strict(), notStrict());

2) পুরো স্ক্রিপ্ট কঠোর মোড

'use strict';
var v = "Hi! I'm a strict mode script!";
console.log(v);

3) একটি অ লেখার গ্লোবাল অ্যাসাইনমেন্ট

'use strict';

// Assignment to a non-writable global
var undefined = 5; // throws a TypeError
var Infinity = 5; // throws a TypeError

// Assignment to a non-writable property
var obj1 = {};
Object.defineProperty(obj1, 'x', { value: 42, writable: false });
obj1.x = 9; // throws a TypeError

// Assignment to a getter-only property
var obj2 = { get x() { return 17; } };
obj2.x = 5; // throws a TypeError

// Assignment to a new property on a non-extensible object.
var fixed = {};
Object.preventExtensions(fixed);
fixed.newProp = 'ohai'; // throws a TypeError

আপনি MDN উপর আরো পড়তে পারেন ।


W3schools থেকে উদ্ধৃতি :

"কঠোর ব্যবহার করুন" নির্দেশিকা

"কঠোর ব্যবহার করুন" নির্দেশটি JavaScript 1.8.5 (ECMAScript সংস্করণ 5) তে নতুন।

এটি একটি বিবৃতি নয়, তবে একটি আক্ষরিক অভিব্যক্তি যা জাভাস্ক্রিপ্টের পূর্ববর্তী সংস্করণগুলি উপেক্ষা করে।

"কঠোর ব্যবহার" এর উদ্দেশ্যটি নির্দেশ করে যে "কোডটি কঠোর মোডে" কার্যকর করা উচিত।

কঠোর মোড দিয়ে, আপনি উদাহরণস্বরূপ, অনির্ধারিত ভেরিয়েবলগুলি ব্যবহার করতে পারবেন না।

কেন কঠোর মোড?

কঠোর মোড এটি "নিরাপদ" জাভাস্ক্রিপ্ট লিখতে আরও সহজ করে তোলে।

কঠোর মোড পরিবর্তন পূর্বে ভুল ত্রুটি মধ্যে "খারাপ সিনট্যাক্স" গ্রহণ।

উদাহরণস্বরূপ, স্বাভাবিক জাভাস্ক্রিপ্টে, একটি পরিবর্তনশীল নাম ভুল করে একটি নতুন গ্লোবাল পরিবর্তনশীল তৈরি করে। কঠোর মোডে, এটি একটি ত্রুটি নিক্ষেপ করবে, এটি ভুলভাবে একটি বৈশ্বিক পরিবর্তনশীল তৈরি করা অসম্ভব করে তোলে।

স্বাভাবিক জাভাস্ক্রিপ্টে, একটি বিকাশকারীকে নন-রাইটেবল বৈশিষ্ট্যগুলিতে মান নির্ধারণের জন্য কোন ত্রুটি প্রতিক্রিয়া পাবেন না।

কঠোর মোডে, একটি অ-লেখার যোগ্য সম্পত্তি, কোন গর্ত-শুধুমাত্র সম্পত্তি, একটি অ বিদ্যমান সম্পত্তি, একটি অ বিদ্যমান বিদ্যমান, বা একটি অ বিদ্যমান বিদ্যমান বস্তুর কোন অ্যাসাইনমেন্ট, একটি ত্রুটি নিক্ষেপ করা হবে।

আরও জানতে http://www.w3schools.com/js/js_strict.asp পড়ুন


যখন যোগ করা হচ্ছে "use strict";, স্ক্রিপ্টটি কার্যকর হওয়ার আগে নিম্নলিখিত ক্ষেত্রে একটি সিনট্যাক্স ত্রুটি ফুরিয়ে যাবে :

  • ভবিষ্যতে এর নাম ECMAScript সংস্করণের জন্য বদলের , (দূরদৃষ্টি জন্য সদ্য সংরক্ষিত মূলশব্দ ব্যবহার করে এর নাম ECMAScript 6 ): implements, interface, let, package, private, protected, public, static, এবং yield

  • ব্লক ফাংশন ঘোষণা

    if(a<b){ function f(){} }
    
  • অক্টাল সিনট্যাক্স

    var n = 023;
    
  • this গ্লোবাল বস্তুর দিকে নির্দেশ করুন।

     function f() {
          "use strict";
          this.a = 1;
     };
     f(); 
    
  • একটি বস্তু আক্ষরিক মধ্যে একটি সম্পত্তি নামের জন্য একই নামের দ্বিগুণ ঘোষণা

     {a: 1, b: 3, a: 7} 
    

    এই আর ECMAScript 6 ( বাগ 1041128 ) ক্ষেত্রে হয় না ।

  • একই নাম ফাংশন সঙ্গে দুটি ফাংশন আর্গুমেন্ট ঘোষণা

    f(a, b, b){}
    
  • একটি undeclared পরিবর্তনশীল একটি মান নির্ধারণ করা হচ্ছে

    function f(x){
       "use strict";
       var a = 12;
       b = a + x*35; // error!
    }
    f();
    
  • deleteএকটি পরিবর্তনশীল নাম ব্যবহার করেdelete myVariable;

  • ব্যবহার evalবা argumentsপরিবর্তনশীল বা ফাংশন যুক্তি নাম হিসাবে

    "use strict";
    arguments++;
    var obj = { set p(arguments) { } };
    try { } catch (arguments) { }
    function arguments() { } 
    

সূত্র:


কঠোর মোড স্বাভাবিক জাভাস্ক্রিপ্ট শব্দকোষে বিভিন্ন পরিবর্তন করে:

  • ত্রুটি নিক্ষেপ তাদের পরিবর্তন করে কিছু জাভাস্ক্রিপ্ট নীরব ত্রুটি নির্মূল করে।

  • জাভাস্ক্রিপ্ট ইঞ্জিন অপ্টিমাইজেশান সঞ্চালন করা কঠিন যে ভুল সংশোধন করে।

  • ECMAScript এর ভবিষ্যতের সংস্করণগুলিতে সংজ্ঞায়িত করা কিছু সিনট্যাক্স নিষিদ্ধ করে।

আরো তথ্যের জন্য কঠোর মোড জাভাস্ক্রিপ্ট





use-strict