জেএসলিন্ট বলেছেন "রেডিক্সের পরামিতি অনুপস্থিত"


538

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

32 অক্ষরের 30 লাইনে সমস্যা: রেডিক্স প্যারামিটার হারিয়েছে Miss

এটি প্রশ্নের মধ্যে কোড:

imageIndex = parseInt(id.substring(id.length - 1))-1;

এখানে কি ভুল?

উত্তর:


967

পার্সিয়ান্টের সাথে রডিক্স পাস করা সর্বদা একটি ভাল অনুশীলন -

parseInt(string, radix)

দশমিক জন্য -

parseInt(id.substring(id.length - 1), 10)

যদি র‌্যাডিক্স প্যারামিটার বাদ দেওয়া থাকে তবে জাভাস্ক্রিপ্ট নিম্নলিখিতটি ধরে নেয়:

  • যদি স্ট্রিংটি "0x" দিয়ে শুরু হয় তবে মূলটি 16 (হেক্সাডেসিমাল) হয়
  • যদি স্ট্রিংটি "0" দিয়ে শুরু হয় তবে মূলটি 8 (অষ্টাল) হয়। এই বৈশিষ্ট্যটি হ্রাস করা হয়
  • যদি স্ট্রিংটি অন্য কোনও মান দিয়ে শুরু হয় তবে মূলটি 10 ​​(দশমিক)

( রেফারেন্স )


7
এর শব্দগুলি থেকে, ডিফল্ট আইএস 10 হয় যদি এটি 0x বা 0 দিয়ে শুরু না হয় তবে এটি 10 ​​এর দশমিকের ডিফল্ট হয় But "এটি" এর সংজ্ঞাটি অ্যারে.ম্যাপ ফাংশনে নির্দিষ্ট করে।
molson504x

81
তাত্ক্ষণিকভাবে অযৌক্তিক ... এই যুক্তি অনুসারে র‌্যাডিক্স আর্গুমেন্টের র‌ডিক্সটি উপস্থাপনের জন্য তৃতীয় পরম হওয়া উচিত
নিশান্ত

6
অন্যান্য মন্তব্যকারীদের সাথে সম্মত হন। ডিফল্ট 10 হ'ল কেন একটি রেডিক্স মান প্রদান করা ভাল? এটি সাধারণ সম্মেলনকে অস্বীকার করে।
রিচার্ড ক্লেটন

9
আর একটি লিঙ্ক ত্রুটি পেতে 10 Redundant radix parameter
টিকে Radix

2
@ নিশান্ত: radixআর্গুমেন্টটি একটি সংখ্যাসূচক মান, একটি সংখ্যার মানের স্ট্রিং প্রতিনিধিত্ব নয়, সুতরাং নির্দিষ্ট করার জন্য কোনও রেডিক্স নেই।
টোকল্যান্ড

79

এই সতর্কতাটি এড়াতে, ব্যবহারের পরিবর্তে:

parseInt("999", 10);

আপনি এটি দ্বারা প্রতিস্থাপন করতে পারেন:

Number("999");


নোট করুন যে পার্সিয়ান্ট এবং সংখ্যাগুলির আলাদা আচরণ রয়েছে , তবে কিছু ক্ষেত্রে, একজন অন্যটিকে প্রতিস্থাপন করতে পারে।


4
এছাড়া মধ্যে বড় কর্মক্ষমতা পার্থক্য আছে parseIntএবং Number। এখানে একটি পুরানো পারফরম্যান্স পরীক্ষা রয়েছে
জোশ উঙ্গার

3
ক্রোম 77: Number()6x এর চেয়ে দ্রুতparseInt()
জ্যানন

1
এটি পরিষ্কার সলিউশন যা ঠিক কাজ করে।
thanos.a

43

আমি প্রশ্নের যথাযথভাবে উত্তর দিচ্ছি না তবে, আমি মনে করি কেন আমাদের মূলসূত্রটি নির্দিষ্ট করা উচিত তা পরিষ্কার করে বোঝা উচিত

এমডিএন ডকুমেন্টেশনে আমরা এটি পড়তে পারি:

যদি রেডিক্স অপরিজ্ঞাত বা 0 (বা অনুপস্থিত) থাকে তবে জাভাস্ক্রিপ্ট নিম্নলিখিতটি ধরে নেয়:

  • [...]
  • যদি ইনপুট স্ট্রিংটি "0" দিয়ে শুরু হয়, মূলাকর্ষণটি আট (অষ্টাল) বা 10 (দশমিক) হয়। ঠিক কোনটি রেডিক্স চয়ন করা হয় তা বাস্তবায়ন নির্ভর। ECMAScript 5 নির্দিষ্ট করে যে 10 (দশমিক) ব্যবহৃত হয়েছে, তবে সমস্ত ব্রাউজার এখনও এটিকে সমর্থন করে না। এই কারণে যখন প্যার্সিইন্ট ব্যবহার করবেন তখন সর্বদা একটি রেডিক্স নির্দিষ্ট করুন।
  • [...]

সূত্র: MDN parseInt ()


1
হ্যাঁ তবে টাইপস্ক্রিপ্ট সংকলক এটি প্রবেশ করিয়ে দেবে, তবে কেন আপনি বিরক্ত করবেন?
স্পোক

2
@ স্পোক কারণ টিএসলিন্ট অভিযোগ করেছেন যে এটি নেই। এবং খরগোশের গর্তের নীচে আমরা যাই ...
মিশনফোর্ড

হ্যাঁ সত্য .. এই কারণেই আমি কেবল এই লিন্টের নিয়মটি অক্ষম করছি। এখনও বুঝতে পারছেন না কেন একটি বিকল্প প্যারামিটার কেন কোনও লিট অভিযোগ অভিযোগ করে .. ওহ ভাল
স্পোক করুন

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

27

আপনি যদি এই পরীক্ষাটি বাদ দিতে চান তবে আপনি এই নিয়মটি বন্ধ করতে পারেন।

প্রবেশ করান:

radix: false

ফাইলটিতে " rules" সম্পত্তি অধীনে tslint.json

আপনি যদি এই ব্যতিক্রমটি না বুঝতে পারেন তবে এটি করার পরামর্শ দেওয়া হয় না।


1
কোডটি Radix ছাড়াই ঠিক জরিমানা চালানোর পরে আমি এটি ব্যবহার করতে যাচ্ছি
উইলিয়াম

22

আপনার জেএস ফাইলের উপরে নিম্নলিখিতটি যুক্ত করা জেএসএইচিন্টকে মূল সূত্রের সতর্কতা দমন করতে বলবে:

/*jshint -W065 */

আরও দেখুন: http://jshint.com/docs/#options


2
এটি কোন jshint বিকল্পের সাথে সামঞ্জস্য করে? আমি আমার সম্পাদনায় জ্বিশিন্ট চালানোর জন্য সাবলাইমলিন্ট ব্যবহার করছি এবং এটি কেবলমাত্র একটি বিকল্পের হ্যাশ নেয়: এটির সেট করার জন্য মূল্য জোড়া, তাই আমি আপনার "-W065" পরামর্শটি প্রয়োগ করতে পারি বলে মনে করি না।
ডিহাইড্রাল

5
আপনি "-W065": trueযেমন একটি .jshintrcফাইল ব্যবহার করতে পারেন ।
আলেক্সফারনান্দেজ

29
-1 অনুগ্রহ করে এটি করবেন না, কেবলমাত্র আপনি যে রেডিক্সটি পার্স করতে চান তা যুক্ত করুন
জুয়ান মেন্ডেস

কোনও ভাষা আরও দৃ strongly়ভাবে টাইপ করা, সংকলক অপ্টিমাইজেশনের জন্য আরও বেশি সুযোগ, যার কারণেই এটি সতর্কতা ছুঁড়ে দিচ্ছে।
হোল্ডঅফহাঙ্গার

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

5

আমি স্ট্রিং রূপান্তর করতে, এটি কেবল + foo ব্যবহার করে সমাধান করেছি।

মনে রাখবেন এটি পঠনযোগ্যতার জন্য দুর্দান্ত নয় (নোংরা ফিক্স)।

console.log( +'1' )
// 1 (int)

3

আপনি নিজের পার্সেন্ট লাইনের ঠিক উপরে এই লাইনটি কেবল যুক্ত করতে পারেন:

// eslint-disable-next-line

এটি পরবর্তী লাইনের জন্য এসলিন্ট চেক অক্ষম করবে। আপনার যদি কেবল এক বা দুটি লাইন বাদ দিতে হয় তবে এটি ব্যবহার করুন।


2

কেবল র‍্যাডিক্সের জায়গায় একটি খালি স্ট্রিং রাখুন, কারণ পার্সইন্ট () দুটি আর্গুমেন্ট নেয়:

parseInt (স্ট্রিং, রেডিক্স);

স্ট্রিংটি পার্স করার মান। যদি স্ট্রিং আর্গুমেন্টটি স্ট্রিং না হয়, তবে এটি স্ট্রিংয়ে রূপান্তরিত হয় (টোস্ট্রিং বিমূর্ত ক্রিয়া ব্যবহার করে)) স্ট্রিং আর্গুমেন্টে শীর্ষস্থানীয় সাদা স্থান উপেক্ষা করা হবে।

রেডিক্স 2 এবং 36 এর মধ্যে একটি পূর্ণসংখ্যা যা উপরে বর্ণিত স্ট্রিংয়ের মূলগুলি (গাণিতিক সংখ্যাগুলিতে ভিত্তি) উপস্থাপন করে। দশমিক সংখ্যা ব্যবস্থার জন্য মানুষ সাধারণত ব্যবহৃত হয় 10 টি নির্দিষ্ট করুন। পাঠকের বিভ্রান্তি দূর করতে এবং পূর্বাভাসযোগ্য আচরণের গ্যারান্টি দিতে সর্বদা এই পরামিতিটি নির্দিষ্ট করুন। সাধারণত কোনও মানকে 10 এ ডিফল্ট করে যখন কোনও রেডিক্স নির্দিষ্ট না করা হয় তখন বিভিন্ন বাস্তবায়ন বিভিন্ন ফলাফল দেয়।

imageIndex = parseInt (id.substring (id.length - 1)) - 1;
imageIndex = parseInt(id.substring(id.length - 1), '')-1;


1

কেবলমাত্র .eslintrc এ আপনার কাস্টম নিয়ম যুক্ত করুন যা দেখতে দেখতে "radix": "off" আর আপনি এই এসিলিন্টের অনিরোধক সতর্কতা থেকে মুক্ত হবেন। এটি এসলিন্ট লাইনারের জন্য।


1

ইসমাস্ক্রিপ্ট ৫ এর পূর্বে পার্সেন্ট () অষ্টাল লিটারালগুলিও স্বয়ংক্রিয়রূপে নিয়েছিল, যার ফলে সমস্যা দেখা দিয়েছে কারণ অনেক বিকাশকারী একটি অগ্রণী 0 অবহেলিত বলে ধরে নিয়েছেন।

সুতরাং পরিবর্তে:

var num = parseInt("071");      // 57

এটা কর:

var num = parseInt("071", 10);  // 71

var num = parseInt("071", 8);

var num = parseFloat(someValue); 

উল্লেখ


0

পরিবর্তে substringফাংশনটি কল করতে আপনি ব্যবহার করতে পারেন.slice()

    imageIndex = parseInt(id.slice(-1)) - 1;

এখানে, স্লাইসে -1 নির্দেশ করে যে শেষ সূচী থেকে স্লাইস শুরু করতে।

ধন্যবাদ।

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