تسلسل JavaScript إلى مجموعة من JSON تتضمن تعبيرات وتواريخ ووظائف منتظمة.
بدأ الرمز في هذه الحزمة حياته كوحدة داخلية للتعبير عن الحالة. لتوسيع فائدتها ، تعيش الآن كـ serialize-javascript وهي حزمة مستقلة على NPM.
ربما تتساءل: ماذا عن JSON.stringify() !؟ لقد وجدنا أننا في بعض الأحيان نحتاج إلى تسلسل وظائف JavaScript أو regexps أو التواريخ أو المجموعات أو الخرائط . مثال رائع هو تطبيق ويب يستخدم توجيه URL من جانب العميل حيث تكون تعريفات المسار regexps التي تحتاج إلى مشاركة من الخادم إلى العميل. لكن هذه الوحدة رائعة أيضًا للتواصل بين عمليات العقدة.
السلسلة التي تم إرجاعها من وظيفة التصدير الفردية لهذه الحزمة هي JavaScript الحرفية التي يمكن حفظها في ملف .js ، أو يتم دمجها في مستند HTML عن طريق جعل محتوى عنصر <script> .
يتم هروب أحرف HTML ومحفات خط JavaScript تلقائيًا.
يرجى ملاحظة أن التسلسل لمجموعات وخرائط ES6 يتطلب دعمًا لـ Array.from (غير متوفر في IE أو Node <0.12) ، أو Array.from polyfill.
التثبيت باستخدام NPM:
$ npm install serialize-javascript var serialize = require ( 'serialize-javascript' ) ;
serialize ( {
str : 'string' ,
num : 0 ,
obj : { foo : 'foo' } ,
arr : [ 1 , 2 , 3 ] ,
bool : true ,
nil : null ,
undef : undefined ,
inf : Infinity ,
date : new Date ( "Thu, 28 Apr 2016 22:02:17 GMT" ) ,
map : new Map ( [ [ 'hello' , 'world' ] ] ) ,
set : new Set ( [ 123 , 456 ] ) ,
fn : function echo ( arg ) { return arg ; } ,
re : / ([^s]+) / g ,
big : BigInt ( 10 ) ,
url : new URL ( 'https://example.com/' ) ,
} ) ;ستنتج ما سبق إخراج السلسلة التالي:
'{"str":"string","num":0,"obj":{"foo":"foo"},"arr":[1,2,3],"bool":true,"nil":null,"undef":undefined,"inf":Infinity,"date":new Date("2016-04-28T22:02:17.000Z"),"map":new Map([["hello","world"]]),"set":new Set([123,456]),"fn":function echo(arg) { return arg; },"re":new RegExp("([^\\s]+)", "g"),"big":BigInt("10"),"url":new URL("https://example.com/")}' ملاحظة: لإنتاج سلسلة تجميل ، يمكنك تمرير وسيطة ثانية اختيارية serialize() لتحديد عدد المساحات المراد استخدامها للمسافة البادئة.
تتمثل الميزة الأساسية لهذه الحزمة في تسلسل التعليمات البرمجية لسلسلة من JavaScript الحرفي الذي يمكن تضمينه في مستند HTML عن طريق إضافته كمحتويات لعنصر <script> . من أجل جعل هذا آمنًا ، يتم هروب أحرف HTML ومحفات خط JavaScript تلقائيًا.
serialize ( {
haxorXSS : '</script>'
} ) ;ستنتج ما ورد أعلاه السلسلة التالية ، الناتج المقيد بـ HTML والذي يعد آمنًا لوضعه في مستند HTML لأنه لن يتسبب في إنهاء عنصر البرنامج النصي المضمّن:
'{"haxorXSS":"\u003C\u002Fscript\u003E"}'يمكنك تمرير وسيطة اختيارية
unsafeserialize()للتسلسل المباشر.
تقبل دالة serialize() كائن options كوسيطة ثانية لها. يتم تخلف جميع الخيارات إلى undefined :
options.space هذا الخيار هو نفس وسيطة space التي يمكن تمريرها إلى JSON.stringify . يمكن استخدامه لإضافة المسافة البيضاء والمسافة البادئة إلى الإخراج المسلسل لجعله أكثر قابلية للقراءة.
serialize ( obj , { space : 2 } ) ; options.isJSON هذا الخيار هو إشارة serialize() أن الكائن الذي يجري التسلسل لا يحتوي على أي وظيفة أو قيم regexps. هذا يمكّن المسار الساخن الذي يسمح بتدوين التسلسل أكثر من 3x أسرع. إذا كنت تقوم بتسلسل الكثير من البيانات ، وتعرف JSON النقي ، فيمكنك تمكين هذا الخيار من أجل التسريع.
ملاحظة: عند استخدام هذا الخيار ، سيظل الإخراج يهرب للحماية من XSS.
serialize ( obj , { isJSON : true } ) ; options.unsafe هذا الخيار هو الإشارة إلى serialize() أننا نريد إجراء تحويل مباشر ، دون حماية XSS. يجب ضبط هذه الخيارات بشكل صريح على true . لن يتم هروب أحرف HTML ومحفات خط JavaScript. سوف تضطر إلى لفة بنفسك.
serialize ( obj , { unsafe : true } ) ; options.ignoreFunction هذا الخيار هو الإشارة إلى serialize() أننا لا نريد تسلسل وظيفة JavaScript. مجرد التعامل مع الوظيفة مثل JSON.stringify do ، ولكن ستعمل الميزات الأخرى كما هو متوقع.
serialize ( obj , { ignoreFunction : true } ) ; بالنسبة لبعض حالات الاستخدام ، قد تحتاج أيضًا إلى إلغاء تمييز السلسلة. هذا ليس بشكل صريح جزء من هذه الوحدة. ومع ذلك ، يمكنك بسهولة كتابتها بنفسك:
function deserialize ( serializedJavascript ) {
return eval ( '(' + serializedJavascript + ')' ) ;
} ملاحظة: لا تنسَ الأقواس حول جافا سكريبت المسلسل ، حيث تعتبر شريحة الافتتاح { بداية جسم.
هذا البرنامج مجاني لاستخدامه تحت Yahoo! شركة BSD ترخيص. راجع ملف الترخيص للحصول على نص الترخيص ومعلومات حقوق الطبع والنشر.