Jshint: يجب ألا تأتي المعلمات العادية بعد المعلمات الافتراضية

تم إنشاؤها على ٣١ مارس ٢٠١٦  ·  19تعليقات  ·  مصدر: jshint/jshint

> jshint -v
jshint v2.9.1

ملف لاختبار السلوك:

var a = function(x = 1, i) {}

نتيجة jshint a.js

a.js: line 1, col 26, Regular parameters should not come after default parameters.

1 error

محتوى .jshintrc :

{
  "asi": true,
  "esversion": 6
}
Needs Discussion

التعليق الأكثر فائدة

تضمين التغريدة في ما يلي مثال لملف .jshintrc شأنه إسكات التحذير:

{
  "esversion": 6,
  "-W138": true
}

ال 19 كومينتر

تم تنفيذ هذه الرسالة في الأصل باعتبارها "خطأ" JSHint (مما يعني أنه يمكن
لا يمكن تجاهله): gh-1779. في حين أنه قد يكون خطأ نحويًا في وقت مبكر
المسودة ، لم يتم الانتهاء منها بهذه الطريقة ، لذلك في gh-2543 ، "خفضنا" مستوى
رسالة إلى تحذير. هذا يعني أنك _may_ تتجاهلها في JSHint 2.9.1 عبر
-W138 .

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

rwaldroncaitp هل لدى أي منكما أي أفكار حول هذا؟

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

function counter(state = 0, action) {

لذلك ، يتم استخدامه على نطاق واسع ، IMHO.

هذا النوع من الأنماط _ بالتأكيد_ هو تعريف "النسالة".

لذلك ، يتم استخدامه على نطاق واسع ، IMHO.

أنا أختلف بشدة مع الإشارة الضمنية إلى أن النمط الذي يظهر في الإعادة يشير إلى شيء "مستخدم على نطاق واسع". لقد بحثت في عملية إعادة التشغيل ووجدت أمثلة على counter(undefined, action) وتركت أتساءل ما هو الهدف المحتمل من هذا ، مع الأخذ في الاعتبار أن كل واحد منهم يتطلب فعلاً وسيطة action ، أو يواجه وقت تشغيل خطأ. إذا كان action مطلوبًا _ دائمًا_ وكان state اختياريًا ، فلماذا تتطلب المكالمات التي يجب أن تمر صراحةً undefined — وهذا يتعارض مع الغرض من قيم المعلمات الافتراضية .

... أنا أميل إلى تقديم خطأ.


ومع ذلك ، لا يزال من غير الواضح ما إذا كان هذا التحذير مناسبًا على الإطلاق.

أعتقد أنه كذلك ، وأي شخص لا يريد التحذير مرحب به لإيقافه.

لا تتردد في إغلاق هذا jugglinmike

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

هل يمكنك تقديم عينة من الخطأ يمكن أن تظهر مع هذا التوقيع؟

خطأ وقت التشغيل الوحيد الذي ستواجهه هو الاتصال مثل: counter() و counter(undefined) ، لكن هذه ليست وجهة نظري. وجهة نظري هي أن هذا التصميم رهيب ويضع عبئًا لا داعي له على المبرمج وعلى أدواته. على سبيل المثال ، يمكن للمُصغّر تحليل ما يلي بشكل معقول:

function counter(action, state = 0) {
  return [action, state];
}
counter({});
counter({}, 0);
counter({}, undefined);

وتنتج:

function c(a,s=0){return[a,s]}
c({});
c({});
c({});

حيث أن وضع الافتراضي أولاً:

function counter(state = 0, action) {
  return [state, action];
}
counter(0, {});
counter(undefined, {});

سينتج:

function c(s=0,a){return[s,a]}
c(0, {});
c(undefined, {});

هذا مثال مفتعل إلى حد ما ، لكنه لا يزال يوضح وجهة نظري بأنه يجعل استخدام المعلمة الافتراضية بلا معنى تمامًا.

بالنسبة لي هو مجرد خاصية للغة.

فقط لأنك تستطيع ، لا يعني أنه يجب عليك ذلك.

لذلك ، في الوقت الحالي ، لا يمكنك شرح سبب سوء التصميم باستثناء القلق بشأن الأخطاء في المصغرات

إن مطالبة جميع مواقع الاتصال بتمرير undefined صريح ، من أجل الالتفاف على توقيع مكالمة سيئ التصميم يعتبر ممارسة سيئة واستخدامًا غير صحيح للمعلمات الافتراضية.

يتم تشجيع هذا السلوك من خلال React / Redux. من المرجح أن أزيل jshint أكثر من إزالة React / Redux: /

http://redux.js.org/docs/basics/Reducers.html

تتمثل إحدى الحيل الرائعة في استخدام بناء جملة الوسائط الافتراضية ES6 لكتابة هذا بطريقة أكثر إحكاما:

function todoApp (state = initialState، action) {
// في الوقت الحالي ، لا تتعامل مع أي إجراءات
// وأعد الدولة الممنوحة لنا.
حالة العودة
}

تضمين التغريدة

txm ماذا يحدث action الذي لم يتم استخدامه مطلقًا؟

ما زلت على رأي أنه في غياب خطر ملموس (وحتى في
وجود أنماط غير مرغوب فيها بخلاف ذلك) ، يجب أن يظل JSHint صامتًا.
ومع ذلك ، أجد صعوبة في فهم كيفية تميز مثال

كيف يمكنني تعطيله ..؟

thalesfsp : أضف /* jshint -W138 */ أضف بداية ملفك. (تأكد من أنك تستخدم jshint v2.9.1 أو أحدث)

عثرت على نفس المشكلة مع Redux. هل يمكن تعطيل هذا في ملف التكوين .jshintrc ، من فضلك؟

تضمين التغريدة في ما يلي مثال لملف .jshintrc شأنه إسكات التحذير:

{
  "esversion": 6,
  "-W138": true
}

(بالمناسبة ، تحتوي وثائق JSHint على مزيد من المعلومات حول تعطيل تحذيرات معينة.)

jugglinmike شكرا. لم أكن أعلم أنه من الممكن استخدام بناء الجملة "-Wxxx" في ملف .jshintrc أيضًا. كنت أستخدم هذا دائمًا في أعلى الملف. جيد المعرفه!

مع استخدام "رد الاتصال" على نطاق واسع كمعامل أخير للدالة ، يبدو تحذير الوبر هذا سخيفًا إلى حد ما بالنسبة لي

openDialog (url، name، args = {}، pos) {
إرجاع الوعد الجديد (الوظيفة (حل ، رفض) {
chrome.windows.create ({
url: url ،
اكتب: "popup" ،
العرض: pos && pos.width || غير معرف،
الارتفاع: ارتفاع الموضع && الموضع || غير معرف،
اليسار: pos && pos.left || غير معرف،
أعلى: pos && pos.top || غير معرف
} ، الوظيفة (ث) {

يبدو أن التعيين الافتراضي للمعلمات الأخرى إلى undefined صالح وتمرير عملية الفحص. أنا لا أقول أن هذا نمط أفضل ولكنه يمر بعملية الفحص.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات