يمكن القول أن جميع أنواع بيانات JS لها الطريقتين: valueof و tostring ، باستثناء NULL. كلاهما يحل مشكلات تشغيل قيمة JavaScript وعرضها. يستخدم على نطاق واسع جدا في البرامج. دعنا نقدمها لك واحدا تلو الآخر.
طريقة JavaScript ValueOF ()
تقوم طريقة ValueOF () بإرجاع القيمة الأصلية للكائن المنطقي.
الاستخدام booleanobject.valueof () ، إرجاع القيمة المنطقية الأصلية بقيمة booleanobject. إذا لم يكن الكائن الذي يدعو إلى الطريقة غير منطقية ، فسيتم إلقاء نوع استثناء.
<script type = "text/javaScript"> var boo = new boolean (false) ؛ document.write (boo.valueof ()) ؛ </script>
سوف النصي أعلاه إخراج خطأ.
طريقة JavaScript ToString ()
تقوم طريقة TOSTRING () بتحويل قيمة منطقية إلى سلسلة وإرجاع النتيجة.
use booleanobject.toString () ، تقوم قيمة الإرجاع بإرجاع السلسلة "true" أو "false" بناءً على القيمة المنطقية الأصلية أو قيمة كائن BooleAnobject. إذا لم يكن الكائن الذي يدعو إلى الطريقة غير منطقية ، فسيتم إلقاء نوع استثناء.
يتم استدعاء هذه الطريقة تلقائيًا عند استخدام كائن منطقي في بيئة السلسلة.
سيقوم البرنامج النصي التالي بإنشاء كائن منطقي وتحويله إلى سلسلة:
<script type = "text/javaScript"> var boo = new boolean (true) ؛ document.write (boo.toString ()) ؛ </script>
إخراج البرنامج النصي: صحيح.
دعونا نلقي نظرة على مثال:
var aaa = {i: 10 ، valueof: function () {return this.i+30 ؛ } ، toString: function () {return this.valueof ()+10 ؛ }} ALERT (AAA> 20) ؛ // truealert (+aaa) ؛ // 40alert (AAA) ؛ // 50هذه هي النتيجة لأنهم يطلقون سرا على أساليب قيمة أو tostring. ولكن كيف تميز في أي ظروف تسمى الطريقة التي تسمى؟ يمكننا اختباره من خلال طريقة أخرى. منذ استخدام Console.log ، يرجى التجربة في FF مع تثبيت Firebug!
var bbb = {i: 10 ، toString: function () {console.log ('toString') ؛ return this.i ؛} ، valueof: function () {console.log ('valueof') ؛ return this.i ؛}} ALERT (BBB) ؛ // 10 toStringalert (+bbb) ؛ // 10 valuefalert (''+bbb) ؛ // 10 valuefalert (سلسلة (BBB)) ؛ // 10 tostringalert (رقم (BBB)) ؛ // 10 valuefalert (bbb == '10') ؛ // valuefalert true (bbb === '10') ؛ // خطأ شنيعللوهلة الأولى ، تكون النتيجة هي الشعور تقريبًا أنه إذا تم تحويله إلى سلسلة ، فسيتم تسمى طريقة ValueOF ، لكن اثنان منهم متنوعون للغاية. أحدهما في حالة تأهب (''+bbb) ، يجب أن يسمى تسلسل السلسلة طريقة tostring ... أخرى يمكننا أن نفهم مؤقتًا أن المشغل === لا يؤدي تحويلًا ضمنيًا ، لذلك لا يتم استدعاؤه. من أجل متابعة الحقيقة ، نحتاج إلى تجارب أكثر صرامة.
var aa = {i: 10 ، toString: function () {console.log ('toString') ؛ return this.i ؛}} ALERT (AA) ؛ // 10 TOSTRINGALERT (+aa) ؛ // 10 tostringalert (''+aa) ؛ // 10 tostringalert (سلسلة (aa)) ؛ // 10 tostringalert (رقم (aa)) ؛ // 10 tostringalert (aa == '10') ؛ // TOSTRINGALERT الحقيقيانظر إلى القيمة مرة أخرى.
var bb = {i: 10 ، valueof: function () {console.log ('valueof') ؛ return this.i ؛}} ALERT (BB) ؛ // [Object Object] ALERT (+bb) ؛ // 10 valuefalert (''+bb) ؛ // 10 valuefalert (String (BB)) ؛ // [كائن كائن] التنبيه (الرقم (BB)) ؛ // 10 valuefalert (bb == '10') ؛ // قيمة حقيقيةلقد وجدت الأمر مختلفًا قليلاً؟ ! انها ليست موحدة ومنتظمة مثل tostring أعلاه. لهذا [كائن الكائن] ، ربما ورثته من الكائن ، دعنا نزيله ونلقي نظرة.
Object.prototype.toString = null ؛ var cc = {i: 10 ، valueof: function () {console.log ('valueof') ؛ return this.i ؛}} ALERT (cc) ؛ // 10 valueofalert (+cc) ؛ // 10 valuefalert (''+cc) ؛ // 10 valuefalert (سلسلة (CC)) ؛ // 10 valuefalert (number (CC)) ؛ // 10 valuefalert (cc == '10') ؛ // قيمة حقيقيةإذا تم إعادة كتابة ToString فقط ، فسيتجاهل تحويل الكائن وجود ValueOF عند التحويل. ومع ذلك ، إذا تم إعادة كتابة طريقة ValueOF فقط ، فسيتم إعطاء طريقة ValueOF الأولوية عند التحويل إلى سلسلة. إذا لم تتمكن من الاتصال بـ ToString ، فيمكنك فقط ترك Valueof تذهب إلى المعركة. لهذه المشكلة الغريبة في الربط ، قد يكون ذلك بسبب المشغل. عندما تفتح ECMA262-5 ، ستجد أن هناك عملية getValue. حسنًا ، يجب الكشف عن الإجابة. ستزيد إعادة الكتابة من تحسين مكالماتهم ، وفي حالة المشغلين ، تكون أولوية قيمة ValueOF أعلى بالفعل من Tostring.
ما سبق هو الوصف الكامل لطرق قيمة و tostring في JavaScript المقدمة لك من قبل المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!