سؤال

وهنا بعض الأحجار الكريمة:

الحروف الحرفية:

var obj = {}; // Object literal, equivalent to var obj = new Object();
var arr = []; // Array literal, equivalent to var arr = new Array();
var regex = /something/; // Regular expression literal, equivalent to var regex = new RegExp('something');

الافتراضيات:

arg = arg || 'default'; // if arg evaluates to false, use 'default', which is the same as:
arg = !!arg ? arg : 'default';

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

(function() { ... })(); // Creates an anonymous function and executes it

سؤال: ما هو السكر النحوي الرائع الآخر المتوفر في جافا سكريبت؟

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

المحلول

والحصول على التاريخ والوقت الحالي كما مللي ثانية:

Date.now()

وعلى سبيل المثال، إلى وقت تنفيذ جزء من التعليمات البرمجية:

var start = Date.now();
// some code
alert((Date.now() - start) + " ms elapsed");

نصائح أخرى

واختبار عضوية القطعة:

var props = { a: 1, b: 2 };

("a" in props) // true
("b" in props) // true
("c" in props) // false

في موزيلا (ويقال IE7) يمكنك إنشاء ثابت XML باستخدام:

var xml = <elem></elem>;

ويمكنك استبدال المتغيرات أيضا:

var elem = "html";
var text = "Some text";
var xml = <{elem}>{text}</{elem}>;

وظائف عن طريق مجهول وإغلاق لإنشاء متغير الخاص (معلومات يختبئ) وما يرتبط بها من وسائل الحصول على / مجموعة:

var getter, setter;

(function()
{
   var _privateVar=123;
   getter = function() { return _privateVar; };
   setter = function(v) { _privateVar = v; };
})()

وتكون قادرة على تقديم أنواع جافا سكريبت الأم عن طريق الميراث نموذجي.

String.prototype.isNullOrEmpty = function(input) {
    return input === null || input.length === 0;
}

يستخدم === لمقارنة القيمة و يكتب:

var i = 0;
var s = "0";

if (i == s)  // true

if (i === s) // false

وسلاسل متعدد الخطوط:

var str = "This is \
all one \
string.";

وبما انك لا يمكن وضع مسافة بادئة للخطوط لاحقة دون إضافة أيضا بيضاء في سلسلة، والناس يفضلون عموما لسلسلة مع المشغل زائد. ولكن هذا لا توفر لطيفة rel="noreferrer"> .

تغيير حجم طول المصفوفة

خاصية الطول هي أ لا تقرأ فقط.يمكنك استخدامه لزيادة أو تقليل حجم المصفوفة.

var myArray = [1,2,3];
myArray.length // 3 elements.
myArray.length = 2; //Deletes the last element.
myArray.length = 20 // Adds 18 elements to the array; the elements have the empty value. A sparse array.

تكرار سلسلة مثل "-" لعدد محدد من المرات من خلال الاستفادة من طريقة الانضمام في مصفوفة فارغة:

var s = new Array(repeat+1).join("-");

النتائج في "---" عند التكرار == ​​3.

ومثل المشغل الافتراضي، || هي المشغل حارس، &&.

answer = obj && obj.property

وبدلا من

if (obj) {
    answer = obj.property;
}
else {
    answer = null;
}
var tags = {
    name: "Jack",
    location: "USA"
};

"Name: {name}<br>From {location}".replace(/\{(.*?)\}/gim, function(all, match){
    return tags[match];
});

والاستدعاء لسلسلة محل مفيد فقط.

حاصل على واضعي :

function Foo(bar)
{
    this._bar = bar;
}

Foo.prototype =
{
    get bar()
    {
        return this._bar;
    },

    set bar(bar)
    {
        this._bar = bar.toUpperCase();
    }
};

ويعطي لنا:

>>> var myFoo = new Foo("bar");
>>> myFoo.bar
"BAR"
>>> myFoo.bar = "Baz";
>>> myFoo.bar
"BAZ"

وهذا ليس جافا سكريبت الحصري، ولكن يوفر مثل ثلاثة خطوط من التعليمات البرمجية:

check ? value1 : value2

وقليلا أكثر على سبيل المثال levik ل:

var foo = (condition) ? value1 : value2;

صفيف # forEach على جافا سكريبت 1.6

myArray.forEach(function(element) { alert(element); });

بعد OBJ || {الافتراضي: True} Syntax:

استدعاء وظيفتك مع هذا:hello(neededOne && needTwo && needThree) إذا كانت إحدى المعلمات غير محددة أو خاطئة، فسيتم استدعاء hello(false)، أحيانا مفيد

في تحليل الحالات مع مجموعة ثابتة من الأجزاء المكونة:

var str = "John Doe";

ويمكنك تعيين النتائج مباشرة إلى المتغيرات، وذلك باستخدام "الإتلاف مهمة" synatx:

var [fname, lname] = str.split(" ");
alert(lname + ", " + fname);

ما هو قليلا أكثر قابلية للقراءة من:

var a = str.split(" ");
alert(a[1] + ", " + a[0]);

وبدلا من ذلك:

var [str, fname, lname] = str.match(/(.*) (.*)/);

لاحظ أن هذا هو جافا سكريبت 1.7 الميزة. لذلك أن موزيلا 2.0+ ومتصفحات كروم 6+، في هذا الوقت.

والاحتجاج على الفور وظيفة السهم:

var test = "hello, world!";
(() => test)(); //returns "hello, world!";

ولقد نسيت:

(function() { ... }).someMethod(); // Functions as objects

وإنشاء كائن مجهول الحرفي مع ببساطة: ({})

مثال: الحاجة إلى معرفة ما إذا كان الأجسام لديها طريقة valueOf:

وفار hasValueOf = !! ({}). valueOf

ومكافأة نحوي السكر: المزدوج لا '!!' لتحويل أي شيء تقريبا إلى قيمة منطقية بإيجاز جدا.

أحب أن أكون قادرًا على تقييم () سلسلة json واستعادة بنية بيانات مملوءة بالكامل.أنا أكره الاضطرار إلى كتابة كل شيء مرتين على الأقل (مرة لـ IE، ومرة ​​أخرى لـ Mozilla).

وتعيين الكلمات الرئيسية المستخدمة بشكل متكرر (أو أي طرق) لمتغيرات بسيطة مثل

  var $$ = document.getElementById;

  $$('samText');

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

var today = new Date((new Date()).setHours(0, 0, 0, 0));

وانها ليست واجهة يجيد تماما بسبب ما يلي سوف تعطينا سوى القيمة العددية التي ليست في الواقع الكائن التاريخ:

var today = new Date().setHours(0, 0, 0, 0);

افتراضي تراجع:

var foo = {}; // empty object literal

alert(foo.bar) // will alert "undefined"

alert(foo.bar || "bar"); // will alert the fallback ("bar")

وهناك مثال عملي:

// will result in a type error
if (foo.bar.length === 0)

// with a default fallback you are always sure that the length
// property will be available.
if ((foo.bar || "").length === 0) 

وهنا واحدة اكتشفت للتو: الاختيار لاغيا قبل استدعاء الدالة:

a = b && b.length;

وهذا هو ما يعادل أقصر ل:

a = b ? b.length : null;

وأفضل جزء هو أنه يمكنك التحقق من سلسلة الملكية:

a = b && b.c && b.c.length;

وأنا أحب كيف بسيط هو العمل مع القوائم:

var numberName = ["zero", "one", "two", "three", "four"][number];

والتجزئة:

var numberValue = {"zero":0, "one":1, "two":2, "three":3, "four":4}[numberName];

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

var errorDesc = {301: "Moved Permanently",
                 404: "Resource not found",
                 503: "Server down"
                }[errorNo] || "An unknown error has occurred";

وكثافة العمليات ليلقي سلسلة

var i = 12;
var s = i+"";
element.innerHTML = "";  // Replaces body of HTML element with an empty string.

واختصار إلى حذف كافة العقد التابعة للعنصر.

وتحويل السلسلة إلى عدد صحيح المتعثرين إلى 0 إذا imposible،

0 | "3" //result = 3
0 | "some string" -> //result = 0
0 | "0" -> 0 //result = 0

ويمكن أن تكون مفيدة في بعض الحالات، ومعظمهم عندما يعتبر 0 نتيجة سيئة

حرفية القالب

var a = 10;
var b = 20;
var text = `${a} + ${b} = ${a+b}`;

ثم نص المتغير سيكون مثل أدناه!

10 + 20 = 30

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