لماذا متغير جافا سكريبت تبدأ مع علامة الدولار؟

StackOverflow https://stackoverflow.com/questions/205853

  •  03-07-2019
  •  | 
  •  

سؤال

وأنا في كثير من الأحيان نرى جافا سكريبت مع المتغيرات التي تبدأ مع علامة الدولار. متى / لماذا اخترت بادئة متغير بهذه الطريقة؟

و(أنا لا يسأل عن تركيب $('p.foo') التي تراها في مسج وغيرها، ولكن المتغيرات الطبيعية مثل $name و$order)

هل كانت مفيدة؟

المحلول

واستخدام شائع جدا في مسج هو التمييز الأجسام مسج المخزنة في المتغيرات من المتغيرات الأخرى. على سبيل المثال، وأود أن تحدد

var $email = $("#email"); // refers to the jQuery object representation of the dom object
var email_field = $("#email").get(0); // refers to the dom object itself

وأجد أن تكون مفيدة جدا في كتابة التعليمات البرمجية مسج ويجعل من السهل على رؤية الأشياء مسج التي لديها مجموعة مختلفة من الخصائص.

نصائح أخرى

في ل1، 2، و <لأ href = "http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262،٪203rd٪20edition،٪20December٪201999 قوات الدفاع الشعبي "يختلط =" noreferrer "> 3rd الطبعة من ECMAScript ، وذلك باستخدام $ -prefixed أسماء المتغيرات ويشجع صراحة المواصفات إلا في سياق من التعليمات البرمجية يتم إنشاؤه تلقائيا:

<اقتباس فقرة>   

ويسمح علامة الدولار ($) وتسطير (_) في أي مكان في المعرف. والمقصود الدولار للاستخدام فقط في الشفرة التي تم إنشاؤها ميكانيكيا.

ولكن في النسخة المقبلة (في 5 الطبعة ، وهو الحالية)، وانخفض هذا التقييد، ومرور أعلاه استبدال

<اقتباس فقرة>   

ويسمح علامة الدولار ($) وتسطير (_) في أي مكان في IdentifierName .

وعلى هذا النحو، يمكن الآن استخدام علامة $ بحرية في أسماء المتغيرات. بعض الأطر والمكتبات الاتفاقيات الخاصة بها على معنى الرمز، لاحظ في إجابات أخرى هنا.

وأما الآخرين وقد ذكر الدولار يهدف إلى استخدامها من قبل الشفرة التي تم إنشاؤها ميكانيكيا. ومع ذلك، فقد تم كسر تلك الاتفاقية من قبل بعض مكتبات جافا سكريبت بشعبية كبيرة. مسج، نموذج وMS AJAX (ويعرف أيضا باسم أطلس) عن استخدام هذا الحرف في معرفات (أو كمعرف بأكمله).

وباختصار يمكنك استخدام $ قتما تشاء. (لن المترجم لا يشكو.) والسؤال هو متى تريد لاستخدامه؟

وأنا شخصيا لا يستخدمونه، ولكن أعتقد استخدامه صالح. أعتقد MS AJAX يستخدمه للدلالة على وظيفة هو اسم مستعار لليسميه البعض أكثر مطول.

وعلى سبيل المثال:

var $get = function(id) { return document.getElementById(id); }

وهذا يبدو وكأنه اتفاقية معقولة.

في سياق AngularJS، يتم استخدام بادئة $ فقط لمعرفات في التعليمات البرمجية إطار ل. وأوعز مستخدمي إطار عدم استخدامه في تحديد الهوية الخاصة بهم:

<اقتباس فقرة>   

الزاوي مساحات $ و$$

     

لمنع التصادم اسم عرضي مع التعليمات البرمجية، البادئات أسماء الزاوي من الأشياء العامة مع $ وأسماء الأشياء خاصة مع $$. من فضلك لا تستخدم $ أو بادئة $$ في التعليمات البرمجية.

المصدر: https://docs.angularjs.org/api

وكنت الشخص الذي نشأت هذه الاتفاقية في عام 2006 والترويج لها في أوائل القائمة البريدية مسج، لذلك اسمحوا لي أن أشاطركم بعض من تاريخ والدافع حوله.

والجواب المقبول يعطي هذا المثال:

var $email = $("#email"); // refers to the jQuery object representation of the dom object
var email_field = $("#email").get(0); // refers to the dom object itself

ولكن هذا لا توضح ذلك بشكل جيد. حتى من دون $، فإننا لا تزال لديها اثنين من أسماء المتغيرات المختلفة هنا، email وemail_field. هذا امر جيد الكثير هناك. لماذا نحن بحاجة إلى رمي $ إلى أحد الأسماء عندما يكون لدينا بالفعل اثنين من أسماء مختلفة؟

في الواقع، لم أكن قد تستخدم email_field هنا لسببين: names_with_underscores لا اصطلاحي جافا سكريبت، وfield لا يجعل حقا معنى لعنصر DOM. لكنني لم تتبع نفس الفكرة.

وحاولت بضعة أشياء مختلفة، من بينها ما تشبه الى حد بعيد سبيل المثال:

var email = $("#email"), emailElement = $("#email")[0];
// Now email is a jQuery object and emailElement is the first/only DOM element in it

(وبطبيعة الحال كائن مسج يمكن أن يكون عنصر DOM أكثر من واحد، ولكن كان رمز كنت أعمل على الكثير من محددات id، حتى في تلك الحالات كان هناك 1: المراسلات 1)

وكان لي حالة أخرى حيث تلقى وظيفة عنصر DOM كمعلمة وأيضا في حاجة إلى كائن مسج له:

// email is a DOM element passed into this function
function doSomethingWithEmail( email ) {
    var emailJQ = $(email);
    // Now email is the DOM element and emailJQ is a jQuery object for it
}

وحسنا أن مربكة قليلا! في واحدة من بلدي بت من التعليمات البرمجية، email هو موضوع مسج وemailElement هو العنصر DOM، ولكن في الآخر، email هو العنصر DOM وemailJQ هو الكائن مسج.

وكان هناك اتساق وظللت التلفيق بينها. بالإضافة إلى أنه كان قليلا من مصدر إزعاج للحفاظ على وجود لتعويض اسمين مختلفين لنفس الشيء: واحدة للكائن مسج وآخر للعنصر DOM مطابقة. وإلى جانب email، emailElement، وemailJQ، وظللت أحاول اختلافات أخرى أيضا.

وبعد ذلك لاحظت وجود نمط مشترك:

var email = $("#email");
var emailJQ = $(email);

ومنذ يعامل جافا سكريبت $ ببساطة رسالة أخرى للأسماء، ومنذ أن كنت دائما حصلت على وجوه مسج مرة أخرى من مكالمة $(whatever)، ونمط بزغ أخيرا على لي. أنا يمكن أن تأخذ مكالمة $(...) ومجرد إزالة بعض الأحرف، وسيكون الخروج مع اسم لطيف جدا:

$("#email")
$(email)

ومشطوب ليست مثالية، ولكن قد تحصل على فكرة: مع بعض الشخصيات حذفها، سواء من تلك الخطوط في نهاية المطاف تبدو وكأنها:

$email

وذلك عندما أدركت أنني لم أكن بحاجة لتعويض اتفاقية مثل emailElement أو emailJQ. كان هناك بالفعل اتفاقية لطيفة يحدق في وجهي: اتخاذ بعض الأحرف من مكالمة $(whatever) ويتحول إلى $whatever

var $email = $("#email"), email = $email[0];
// $email is the jQuery object and email is the DOM object

وو:

// email is a DOM element passed into this function
function doSomethingWithEmail( email ) {
    var $email = $(email);
    // $email is the jQuery object and email is the DOM object
    // Same names as in the code above. Yay!
}

وهكذا لم يكن لدي لتعويض اسمين مختلفين في كل وقت ولكن يمكن فقط استخدام نفس الاسم مع أو بدون بادئة $. وكانت البادئة $ تذكير لطيفة التي كنت أتعامل مع كائن مسج:

$('#email').click( ... );

وأو:

var $email = $('#email');
// Maybe do some other stuff with $email here
$email.click( ... );

وستيفو هو الحق، ومعنى واستخدام علامة النصي الدولار (في جافا سكريبت ومنصة مسج، ولكن ليس في PHP) هو الدلالي تماما. $ هو حرف التي يمكن استخدامها كجزء من اسم معرف. وبالإضافة إلى ذلك، علامة الدولار وربما لا أكثر "غريب" الشيء الذي يمكن أن تواجهها في جافا سكريبت. وفيما يلي بعض الأمثلة على أسماء معرف صالحة:

var _       = function() { alert("hello from _"); }
var \u0024  = function() { alert("hello from $ defined as u0024"); }
var Ø       = function() { alert("hello from Ø"); }
var $$$$$   = function() { alert("hello from $$$$$"); }

وجميع من الأمثلة أعلاه ستعمل.

ومحاولة منهم.

والحرف $ ليس له معنى خاص لمحرك جافا سكريبت. انها مجرد حرف صالح آخر في اسم متغير مثل زي، A-Z، _، 0-9، الخ ...

ومنذ _ في بداية اسم متغير كثيرا ما يستخدم للإشارة إلى المتغير الخاص (أو على الأقل أحد يقصد أن يبقى القطاع الخاص)، وأجد $ مريحة لإضافة أمام بلدي الأسماء المستعارة وجيزة الخاصة للمكتبات رمز عام.

وعلى سبيل المثال، عند استخدام مسج، أنا أفضل أن استخدام $J متغير (بدلا من $ فقط) واستخدام $P عند استخدام php.js، وما إلى ذلك.

والبادئة يجعلها متميزة بصريا من المتغيرات الأخرى مثل بلدي المتغيرات الثابتة الخاصة، الدلالة لي في حقيقة أن الرمز هو جزء من بعض المكتبات أو غيرها، وأقل عرضة للصراع أو الخلط بين الآخرين بمجرد معرفة الاتفاقية.

وكما أنها لا تشوش رمز (أو تتطلب الكتابة إضافية) كما يفعل الاسم المحدد تماما المتكررة لكل مكالمة المكتبة.

وأحب أن أعتقد انه بأنها على غرار ما تفعل مفاتيح معدل لتوسيع إمكانيات مفاتيح واحدة.

ولكن هذا هو مجرد اتفاقية الخاصة.

ولقد شهدت على مدى السنوات ال 4 الماضية، فإنه سيتم السماح لبعض واحدة لتحديد بسهولة ما إذا كان المتغير تشير قيمة / وجوه أو ملفوفة مسج عنصر DOM

Ex:
var name = 'jQuery';
var lib = {name:'jQuery',version:1.6};

var $dataDiv = $('#myDataDiv');

في المثال أعلاه عندما أرى المتغير "$ dataDiv" أستطيع أن أقول بسهولة أن هذا يشير المتغير إلى مسج ملفوفة عنصر DOM (في هذه الحالة هو شعبة). وأيضا يمكن أن أدعو جميع الطرق مسج مع من التفاف الكائن مرة أخرى مثل $ dataDiv.append ()، $ dataDiv.html ()، $ dataDiv.find () بدلا من $ ($ dataDiv) .append ().

ونأمل أن قد ساعد. تريد حتى النهاية إلى القول أنه سيكون ممارسة جيدة لمتابعة ذلك ولكن ليس إلزاميا.

وبينما يمكنك ببساطة استخدامه لبادئة المعرفات الخاصة بك، من المفترض أن يتم استخدامها لالشفرة التي تم إنشاؤها، مثل الرموز استبدال في قالب، على سبيل المثال.

و${varname} هو مجرد اصطلاح التسمية المطورين مسج استخدامها لتمييز المتغيرات التي يحتجزون عناصر مسج.

ويستخدم {varname} سهل لتخزين المواد العامة مثل النصوص والجمل. ${varname} يحمل عناصر عاد من مسج.

ويمكنك استخدام {varname} سهل لتخزين عناصر مسج كذلك، ولكن كما قلت في بداية هذا يميزها عن المتغيرات واضحة ويجعل من الاسهل بكثير لفهم (تخيل الخلط لمتغير عادي والبحث في جميع أنحاء لفهم ما يحتفظ به).

وعلى سبيل المثال:

var $blah = $(this).parents('.blahblah');

وهنا، بلاه هو تخزين عنصر مسج عاد.

وهكذا، عندما يقوم شخص آخر يرى $blah في القانون، وأنها سوف تفهم انها ليست مجرد سلسلة أو عدد، انها عنصر مسج.

يستخدم الزاوي هو لخصائص الناتجة عن هذا الإطار. تخمين، وهم في طريقهم من خلال التلميح (المنحلة) المقدمة من ECMA-262 3.0.

ويستخدم $ للتمييز بين المتغيرات المشتركة والمتغيرات مسج في حالة المتغيرات العادية. تتيح لك وضع النظام في فليبكارت ثم إذا كان متغير يظهر لك الناتج سلسلة ثم يدعى أجل ذلك بهذه البساطة "النظام" ولكن إذا كنا انقر على أمر مكان ثم يتم إرجاع كائن سيتم يرمز هذا الكائن التي كتبها $ بأنه "$ ترتيب "بحيث مبرمج قد قادرة على قصاصة من المتغيرات جافا سكريبت والمتغيرات مسج في رمز بأكمله.

إذا كنت ترى علامة الدولار ($) أو علامة الدولار مزدوج ($$)، وغريبة على ما يعنيه هذا في إطار النموذج، وهنا هو الجواب:

$$('div');
// -> all DIVs in the document.  Same as document.getElementsByTagName('div')!

$$('#contents');
// -> same as $('contents'), only it returns an array anyway (even though IDs must be unique within a document).

$$('li.faux');
// -> all LI elements with class 'faux'

المصدر:
http://www.prototypejs.org/api/utility/dollar-dollar

والسبب في أنني في بعض الأحيان استخدام فب اسم-الاتفاقيات مع جافا سكريبت المتغيرات: عند القيام التحقق من صحة المدخلات، اريد ان اشغل نفس الخوارزميات كل من العميل بالضبط، ومن جانب الخادم. أريد حقا الجانب الثاني من التعليمات البرمجية لمشابها قدر الإمكان، لتبسيط الصيانة. استخدام علامات الدولار في أسماء المتغيرات يجعل هذا أسهل.

و(كما أن بعض وظائف المساعد حكيمة تساعد على جعل رمز تبدو مماثلة، التفاف على سبيل المثال مساهمة ذات قيمة عمليات البحث، الإصدارات غير OO من strlen، SUBSTR، وما إلى ذلك لا يزال يتطلب بعض التغيير والتبديل اليدوي بالرغم من ذلك.)

وA صحيح جافا سكريبت معرف shuold يجب أن يبدأ بحرف،     الشرطة السفلية (_)، أو علامة الدولار ($).    يمكن الأحرف التالية أيضا     تكون أرقام (0-9). نظرا لأن جافا سكريبت لحالة حساسة،     حروف     تتضمن الأحرف "A" من خلال "Z" (الأحرف الكبيرة) و     الحروف "أ" إلى "z" (صغيرة).

والصفات:
https://developer.mozilla.org/en-US / مستندات / الانترنت / جافا سكريبت / دليل / Grammar_and_types # المتغيرات

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top