জাভাস্ক্রিপ্টে = + _ এর অর্থ কী


252

আমি ভাবছিলাম জাভাস্ক্রিপ্টে = + _ অপারেটরের অর্থ কী। দেখে মনে হচ্ছে এটি কাজ করে।

উদাহরণ:

hexbin.radius = function(_) {
   if (!arguments.length)
       return r;
   r = +_;
   dx = r * 2 * Math.sin(Math.PI / 3);
   dy = r * 1.5;
   return hexbin;
};

57
আমাকে ভাল পুরানো পদ্ধতির অপারেটরটির স্মরণ করিয়ে দিয়েছে-->
ওভ

12
এখানে + টি অ্যানারি অপারেটর, _ এর অপরেনড হিসাবে।
পিটার উইটোভেট

44
পার্ল প্রোগ্রামারের মতো দেখে মনে হচ্ছে ডিফল্ট ভেরিয়েবলটি যেতে দেয়নি ;-)
মাইকেল ওয়াইল্ড

4
একটি ভাল সিনট্যাক্স-হাইলাইটিং আপনাকে প্রশ্নের উত্তর দিতে সহায়তা করবে।
হুগো ডের হাঞ্জিজে

18
আপনি একটি হাসি মুখ তৈরি করতে পারেনx= +_+ 0;
tckmn

উত্তর:


396
r = +_;
  • +_একটি সংখ্যায় যা আছে তা নিক্ষেপ করার চেষ্টা করে ।
  • _শুধুমাত্র একটি পরিবর্তনশীল নাম (না একটি অপারেটর), এটা হতে পারে a, fooইত্যাদি

উদাহরণ:

+"1"

শুদ্ধ সংখ্যা 1 এ "1" নিক্ষেপ করুন।

var _ = "1";
var r = +_;

rএখন 1, না "1"

তদতিরিক্ত, অ্যারিমেটিক অপারেটরগুলির MDN পৃষ্ঠা অনুসারে :

অ্যানারি প্লাস অপারেটর তার অপারেন্ডের আগে এবং তার অপারেন্ডে মূল্যায়ন করে তবে এটি ইতিমধ্যে যদি না হয় তবে এটি একটি সংখ্যায় রূপান্তরিত করার চেষ্টা করে[...] এটা ইন্টিজার এবং floats এর স্ট্রিং উপস্থাপনা, সেইসাথে অ স্ট্রিং মান রূপান্তর করতে পারেন true, falseএবং null। দশমিক এবং হেক্সাডেসিমাল ( "0x"পূর্বনির্ধারিত) উভয় বিন্যাসে পূর্ণসংখ্যা সমর্থিত। নেতিবাচক সংখ্যাগুলি সমর্থিত (যদিও হেক্সের পক্ষে নয়)। যদি এটি কোনও নির্দিষ্ট মানকে বিশ্লেষণ করতে না পারে তবে তা মূল্যায়ন করবে NaN

এটিও লক্ষ করা যায়

আনারি প্লাস হ'ল কিছুকে সংখ্যায় রূপান্তর করার দ্রুত এবং পছন্দসই উপায়


2
নেই + একটি সংখ্যা সত্যিই গড় ঢালাই, অথবা নেই +_সত্যিই গড় 0+_, যে ক্ষেত্রে _0 যোগ করার আগে, নিক্ষেপ হবে?
কলিঙ্কামেরন


17
@ c.cam108 - না, তারা একই রকম আচরণ করে না। ইউনারি প্লাস একটি সংখ্যার মান কাস্ট করে, তবে বাইনারি প্লাসগুলি করে না: +'12' === 12(ফলাফলটি একটি সংখ্যা), তবে 0 + '12' === '012'(ফলাফলটি একটি স্ট্রিং)। নোট, তবে, যে 0 - '12' === -12
Kobi

1
@ জুজারেল শিওর, তবে এটি ভাল অনুশীলন নয়। সংযোজন ব্যবহার করার চেষ্টা করুন;)
ইজকাটা

পারেলের ডিফল্ট ভেরিয়েবল with _ দিয়ে ম্যাথিউড
লক

95

এটি কোনও অ্যাসাইনমেন্ট অপারেটর নয়।

  • _ শুধুমাত্র একটি পরামিতি ফাংশন পাস।

    hexbin.radius = function(_) {
                    //       ^ It is passed here
        // ...
    };
  • পরের লাইনে একটি সংখ্যা বা পূর্ণসংখ্যার মানটি r = +_; +পরিবর্তনশীল ( _) পরিবর্তন করে এবং এটিকে ভেরিয়েবলের জন্য বরাদ্দ করেr

+=অপারেটরের সাথে এটি ব্যবহার করবেন না


54

=+আসলে দুটি অপারেটর =হ'ল অ্যাসাইনমেন্ট +এবং _এটি ভেরিয়েবল নাম।

মত:

i = + 5;
or 
j = + i;
or 
i = + _;

আমার নিম্নলিখিত কোডগুলি শুধুমাত্র আপনার ব্যবহার দেখানোর জন্য সাহায্য করবে =+একটি রূপান্তর করতে স্ট্রিং মধ্যে int- এ
উদাহরণ:

y = +'5'
x = y +5
alert(x);

ফলাফল 10

ব্যবহার: সুতরাং অন্যথায় কারণে এখানে yint :5=+

y = '5'
x = y +5
alert(x);

ফলাফল 55

যেখানে হিসাবে _একটি পরিবর্তনশীল।

_ = + '5'
x = _ + 5
alert(x)

ফলাফল 10

তদ্ব্যতীত, আপনি এটি একই জিনিস অর্জন করতে পারে তা জানতে আকর্ষণীয় হবে ~(যদি স্ট্রিংটি ইন্টিং স্ট্রিং হয় (ফ্লোটটি ইন্ট্রাস্টের বৃত্তাকার হবে) )

y = ~~'5'  // notice used two time ~
x = y  + 5
alert(x);

এছাড়াও 10 আউটপুট

~বিটওয়াইজ নয়: এর অপরেন্দ্রের বিটগুলি উল্টে দেয়। মাত্রা পরিবর্তনের জন্য আমি দু'বার করেছিলাম।


1
আমি প্রায়শই x|0ডাবলকে ইনটে রূপান্তর করতে ব্যবহার করি ; তবে এটি পাশাপাশি '~' ব্যবহারের ক্ষেত্রে <2 ^ 32 সংখ্যাগুলিতে সীমাবদ্ধতার শাস্তি রয়েছে। + "2e15" করে না।
আকি সুহিকনেন

@ আকসুইহকোনেন হ্যাঁ ভাল, আমি বিশ্বাস করি x|0তখন আরও দ্রুত +। সঠিক ? সুন্দর কৌশল :)। (২) আমি ~কেবল ওপি প্রদর্শন করতে ব্যবহার করি যা +কেবলমাত্র একটি চিহ্নই ব্যবহার করা যায় না ( আমি নিজেই ব্যবহার করি+ )।
গ্রিজেশ চৌহান

বলা মুশকিল - এখানে জাসস্পিফ রয়েছে যদিও এটি পরিমাপ করা উচিত one এই দুটি অপারেটরের সম্পূর্ণ ভিন্ন অর্থ রয়েছে। যদি কেবল একটি সংখ্যার প্রয়োজন হয় (এবং পূর্ণসংখ্যার নয়) তবে '+' যাইহোক একটি অক্ষর ছোট।
আকি সুহিকনেন

1
প্রকৃতপক্ষে আমি এটি পরীক্ষা করে দেখেছি jsperf - 18M '' 0 'এর জন্য, 19 মিটি' + 'এর জন্য; পারফরম্যান্স সম্ভবত ব্রাউজার থেকে ব্রাউজারে পরিবর্তিত হবে। jsperf.com/strtoint
আকী সুহিকনেন

1
@ আকসুইহকোনেন ওহ আমার, সবেমাত্র ফায়ারফক্সে জাসস্পিফ পরীক্ষা হয়েছে, বিশাল পার্থক্য .. খুব |দ্রুত।
তপিরবয়

16

এটা না =+। জাভাস্ক্রিপ্টে, +মানে এটি সংখ্যায় পরিবর্তন করুন।

+'32' 32 রিটার্ন দেয়

+'a' NAN প্রদান করে।

সুতরাং আপনি isNaN()এটি সংখ্যায় পরিবর্তন করা যায় কিনা তা পরীক্ষা করতে ব্যবহার করতে পারেন।


16

এটি একটি লুক্কায়িত।

গুরুত্বপূর্ণ বিষয়টি বুঝতে হবে যে এখানে আন্ডারস্কোর চরিত্রটি আসলে একটি পরিবর্তনশীল নাম , অপারেটর নয়।

এর সামনের প্লাস সাইনটি আন্ডারস্কোরের ধনাত্মক সংখ্যাসূচক মানটি পেয়েছে - অর্থাত্ কার্যকরভাবে আন্ডারস্কোর ভেরিয়েবলটিকে একটি ইন্ট হিসাবে কার্যকর করা। আপনি একই প্রভাব অর্জন করতে পারেন parseInt()তবে এটি আরও সংক্ষিপ্ত হওয়ার কারণে এখানে প্লাস সাইন কাস্টিং সম্ভবত ব্যবহৃত হবে।

এবং এটি কেবলমাত্র একটি স্ট্যান্ডার্ড ভেরিয়েবল অ্যাসাইনমেন্ট হিসাবে সমান চিহ্নটিকে ছেড়ে দেয়।

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


1
+1, আপনি এখানে একমাত্র যেমন স্পষ্টভাবে নির্দেশ করতে পারেন যে _এটি একটি চলক।
TRIG

@ টিআরআইজি স্টারএক্স এর উত্তর সম্পর্কে কী জানায়, যা টিএল; ড না করেই তা করে?
ম্যাথলেটিক্স


9

আমি মনে করি আপনি বলতে চান r = +_;? সেক্ষেত্রে এটি প্যারামিটারকে একটি তে রূপান্তর Number_'12 .3 ' বলুন , তারপরে +'12.3'ফিরে আসবে 12.3। সুতরাং উদ্ধৃত বিবৃতিতে +_বরাদ্দ করা হয়েছে r


6

_কেবলমাত্র আ আ ভেরিয়েবল নাম, ফাংশনটির প্যারামিটার হিসাবে পাস hexbin.radiusএবং +এটি সংখ্যায় ফেলে cast

আমাকে আপনার ফাংশনের মতো একটি উদাহরণ তৈরি করুন।

var hexbin = {},r  ;

hexbin.radius = function(_) {
   if (!arguments.length)
      return r;
   console.log( _ , typeof _ )    
   r = +_;
   console.log( r , typeof r , isNaN(r) );   
}

এবং এই উদাহরণ ফাংশন চালান .. যা ফলাফল

hexbin.radius ("1");

1 string
1 number false 

hexbin.radius (1);

1 number
1 number false

hexbin.radius ([]);

[] object
0 number false

hexbin.radius ('a');

a string
NaN number true

hexbin.radius ({});

Object {} object
NaN number true

hexbin.radius (সত্য);

true boolean
1 number false

খুব দেরিতে উত্তর দেওয়া হয়েছে তবে খুব সুন্দর উত্তর +।
গ্রিজেশ চৌহান

5

এটি একটি নম্বর বাম দিকের ভেরিয়েবলকে নতুন মান নির্ধারণ করবে।

var a=10;
var b="asg";
var c=+a;//return 10
var d=-a;//return -10
var f="10";

var e=+b;
var g=-f;

console.log(e);//NAN
console.log(g);//-10

আপনি একটি +আগে ভুলে গেছেন b
আটটিলা ও।

1
থ্যাঙ্কস 4 আমাকে একটি খারাপ উত্তর লিখতে সহায়তা করে।
অমরেন্দ্র

3

+_প্রায় সমতুল্য এর parseFloat(_)। পর্যবেক্ষণ করুন যে parseIntবিন্দুর মতো অ-সংখ্যাসূচক অক্ষরে থামবে whereasparshFloat হবে না।

মেপুঃ:

    parseFloat(2.4) = 2.4 
vs 
    parseInt(2.4) = 2 
vs 
    +"2.4" = 2.4

মেপুঃ:

var _ = "3";
    _ = +_;

console.log(_); // will show an integer 3

খুব কম পার্থক্য:


আমি মনে করি প্রথম লাইনে আপনি parseInr(_)পরিবর্তে বলতে চান parseFloat(_) ?
গ্রিজেশ চৌহান

1
না আমি বোঝাতে চাইছি float, কারণ পার্সআইঙ্কটি সংখ্যাসূচক চরিত্রে থামবে, পার্সফ্লোট এটি করবে না। মেপুঃ: parseFloat(2.4) = 2.4বনাম parseInt(2.4) = 2
ব্রায়ান

3

সহজ কথায়, সংখ্যা () নির্মাণকারী ব্যবহারের +_ সমতুল্য

আসলে এটি খেজুরগুলিতেও কাজ করে:

var d = new Date('03/27/2014');
console.log(Number(d)) // returns 1395903600000
console.log(+d) // returns 1395903600000

ডেমো: http://jsfiddle.net/dirtyd77/GCLjd/


এমডিএন - ইউনারি প্লাস (+) বিভাগে আরও তথ্য পাওয়া যাবে :

অ্যানারি প্লাস অপারেটর তার অপারেন্ডের আগে এবং তার অপারেন্ডে মূল্যায়ন করে তবে এটি ইতিমধ্যে যদি না হয় তবে এটি একটি সংখ্যায় রূপান্তরিত করার চেষ্টা করে। যদিও অ্যানারি অবহেলা (-) অ-সংখ্যাগুলিকে রূপান্তর করতে পারে তবুও অ্যানারি প্লাস হ'ল কিছুকে সংখ্যায় রূপান্তরিত করার দ্রুত এবং পছন্দসই উপায়, কারণ এটি সংখ্যার উপর অন্য কোনও ক্রিয়াকলাপ সম্পাদন করে না। এটি পূর্ণসংখ্যা এবং ভাসমানগুলির স্ট্রিং উপস্থাপনা এবং অ-স্ট্রিং মানগুলি সত্য, মিথ্যা এবং নালাকে রূপান্তর করতে পারে। দশমিক এবং হেক্সাডেসিমাল ("0x" -প্রিফিক্সড) উভয় বিন্যাসে পূর্ণসংখ্যা সমর্থিত। নেতিবাচক সংখ্যাগুলি সমর্থিত (যদিও হেক্সের পক্ষে নয়)। যদি এটি কোনও নির্দিষ্ট মানকে বিশ্লেষণ করতে না পারে তবে এটি NaN এ মূল্যায়ন করবে।


2

এই অভিব্যক্তিতে:

r = +_;
  • '+' এখানে অবিচ্ছিন্ন অপারেটর হিসাবে কাজ করে যা ডান অপরেন্ডের মান রূপান্তর করতে চেষ্টা করে । এটি অপারেন্ডকে রূপান্তর করে না তবে মূল্যবান মান। সুতরাং _এটি "1" থেকে থাকলে এটি যদি প্রাথমিকভাবে ছিল তবে এটি rশুদ্ধ সংখ্যায় পরিণত হবে।

এই সংখ্যাগুলি বিবেচনা করুন যে কেউ সংখ্যার রূপান্তরকরণের জন্য + প্রয়োগ করতে চায়

+"-0" // 0, not -0
+"1" //1
+"-1" // -1
+"" // 0, in JS "" is converted to 0
+null // 0, in JS null is converted to 0
+undefined // NaN
+"yack!" // NaN
+"NaN" //NaN
+"3.14" // 3.14

var _ = "1"; +_;_ // "1"
var _ = "1"; +_;!!_ //true
var _ = "0"; +_;!!_ //true
var _ = null; +_;!!_ //false

যদিও এটি দ্রুততম সংখ্যার রূপান্তরকারী আমি খুব কমই ব্যবহার করতে পারলে একজনকে এটিকে অতিরিক্ত ব্যবহারের পরামর্শ দিয়েছি। parseInt/parseFloatভাল আরও পঠনযোগ্য বিকল্প।

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