سؤال

رد على SO حصلت لي التفكير، لا جافا سكريبت ضمان ترميز endian معين عبر أنظمة التشغيل والمتصفحات؟

وأو بعبارة أخرى هي التحولات المختصة بالبت على الأعداد الصحيحة "آمنة" في جافا سكريبت؟

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

المحلول

نعم، فهي آمنة. على الرغم من أنك لا تحصل على فوائد السرعة التي قد الأمل منذ بدء العمليات قليلا JS هي " الإختراق ".

نصائح أخرى

وتحول آمن، ولكن السؤال هو معيب لendianness لا يؤثر على عمليات التحول الشيء على أي حال. تحول اليسار هو نفسه على النظم الكبيرة endian وEndian طفيف في جميع اللغات. (التحول الحق يمكن أن تختلف، ولكن فقط بسبب تفسير بت تسجيل، وليس الأوضاع النسبية للأي بت).

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

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

ومؤرخة بعض من هذه الإجابات، لأن endianness <م> يمكن تكون ذات صلة عند استخدام المصفوفات كتبته! النظر فيما يلي:

var arr32 = new Uint32Array(1);
var arr8 = new Uint8Array(arr32.buffer);
arr32[0] = 255;
console.log(arr8[0], arr8[1], arr8[2], arr8[3]);

عند تشغيل هذه في وحدة كروم، فإنه ينتج 255 0 0 0، مشيرا إلى أن الجهاز الخاص بي هو Endian طفيف. ومع ذلك، صفائف كتبته استخدام endianness النظام افتراضيا ، لذلك قد ترى 0 0 0 255 بدلا إذا كان الجهاز الخاص بك هو كبير-endian.

وECMA سيناريو لا يكون في الواقع مفهوم من نوع عدد صحيح لكنه أجبر ضمنيا إلى أو من الدقة المزدوجة القيمة الفاصلة العائمة عند الضرورة (إذا كان عدد ممثلة كبير جدا أو إذا كان لديه عنصر كسور).

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

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

وتحولات المختصة بالبت على الأعداد الصحيحة "آمنة" في جافا سكريبت؟

وفقط من أجل الأعداد الصحيحة التي تدخل ضمن 32 بت (31 + علامة). على عكس، مثلا، بيثون، لا يمكنك الحصول على 1 << 40.

وهذه هي الطريقة التي يتم تعريفها مشغلي المختصة بالبت في العمل من قبل ECMA-262، على الرغم من أرقام جافا سكريبت هي تعوم في الواقع. (من الناحية الفنية العائمة الدقة المزدوجة، مما يتيح لك 52 بت من العشري، بسهولة بما يكفي لتغطية مجموعة من كثافة العمليات 32 بت).

وليس هناك قضية "endianness" تشارك في العمليات الحسابية المختصة بالبت، ويتم بناء أي شكل التخزين بايت حيث يمكن أن تشارك endianness إلى جافا سكريبت.

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

scroll top