WordPress : Javascript, virgules dans les instructions IF – essayer de comprendre ce code

Publié par Jean-Michel le

Je travaille avec un thème WP appelé DIVI et en essayant de comprendre comment fonctionne leur Slider, je suis tombé sur ce code que j’essaie de comprendre :

    window.et_pb_slider_init=function($this_slider){
            var et_slider_settings={fade_speed:700,
                                    slide:$this_slider.hasClass("et_pb_gallery")?".et_pb_gallery_item":".et_pb_slide"};

            if($this_slider.hasClass("et_pb_slider_no_arrows")&&(et_slider_settings.use_arrows=!1),
            $this_slider.hasClass("et_pb_slider_no_pagination")&&(et_slider_settings.use_controls=!1),
            $this_slider.hasClass("et_slider_auto")){
                    et_slider_settings.slideshow=!0;
                    var et_slider_autospeed=/et_slider_speed_(d+)/g.exec($this_slider.attr("class"));
                    et_slider_settings.slideshow_speed=null===et_slider_autospeed?10:et_slider_autospeed[1]
                    }

            $this_slider.parent().hasClass("et_pb_video_slider")&&(et_slider_settings.controls_below=!0,
                    et_slider_settings.append_controls_to=$this_slider.parent(),
                    setTimeout(function(){
                            $(".et_pb_preload").removeClass("et_pb_preload")
                    },500)),
            $this_slider.hasClass("et_pb_slider_carousel")&&(et_slider_settings.use_carousel=!0),
            $this_slider.et_pb_simple_slider(et_slider_settings)
            }

Ce qui me déroute vraiment, c’est l’instruction IF à la ligne 5 et le code qui suit à la ligne 13.

I saw in another post here that when IF statements are separated by commas, each line is evaluated but only the last operand is returned – but I didn’t get that cos if only the last one is returned, what earthy point do the other operands have?! Unless they are actually changing variables – but I’ve never seen that done in an IF statement before, though IF were only for comparing values.

So I wondered, could this code :

            if($this_slider.hasClass("et_pb_slider_no_arrows")&&(et_slider_settings.use_arrows=!1),
            $this_slider.hasClass("et_pb_slider_no_pagination")&&(et_slider_settings.use_controls=!1),
            $this_slider.hasClass("et_slider_auto")){
                    et_slider_settings.slideshow=!0;
                    var et_slider_autospeed=/et_slider_speed_(d+)/g.exec($this_slider.attr("class"));
                    et_slider_settings.slideshow_speed=null===et_slider_autospeed?10:et_slider_autospeed[1]
                    }

Also be written like this? :

    if($this_slider.hasClass("et_pb_slider_no_arrows")){
            et_slider_settings.use_arrows=!1
            }

    if($this_slider.hasClass("et_pb_slider_no_pagination")){
            et_slider_settings.use_controls=!1
            }

    if($this_slider.hasClass("et_slider_auto")){
            et_slider_settings.slideshow=!0;
            var et_slider_autospeed=/et_slider_speed_(d+)/g.exec($this_slider.attr("class"));
            et_slider_settings.slideshow_speed=null===et_slider_autospeed?10:et_slider_autospeed[1]
            }

And what is happening in the code after, is that also somehow working like an IF statement?

            $this_slider.parent().hasClass("et_pb_video_slider")&&(
                    et_slider_settings.controls_below=!0,
                    et_slider_settings.append_controls_to=$this_slider.parent(),
                    setTimeout(function(){
                            $(".et_pb_preload").removeClass("et_pb_preload")
                    },500)
                    ),$this_slider.hasClass("et_pb_slider_carousel")&&(et_slider_settings.use_carousel=!0),
                    $this_slider.et_pb_simple_slider(et_slider_settings)

Is this code saying this :

    if($this_slider.parent().hasClass("et_pb_video_slider")){
                    et_slider_settings.controls_below=!0;
                    et_slider_settings.append_controls_to=$this_slider.parent();
                    setTimeout(function(){
                            $(".et_pb_preload").removeClass("et_pb_preload")
                            },500)
                    };

    if($this_slider.hasClass("et_pb_slider_carousel")){
            et_slider_settings.use_carousel=!0
            }

    $this_slider.et_pb_simple_slider(et_slider_settings);

J’ai lu qu’avec l’opérateur &&, la deuxième partie n’est évaluée que si la première partie peut être convertie en true, donc je suppose que cela pourrait fonctionner comme et si l’instruction… ou est-ce que je comprends complètement mal? Est-ce fait pour optimiser un peu le code ? Sauvegarde de quelques caractères ? Ou est-ce que cela exprime quelque chose de différent de ce que je pense ?

Solution n°1 trouvée

Qui exécutera toutes les expressions et utilisera le dernier opérande comme condition. Si votre dernier opérande renvoie vrai, il est vrai. Cas d’utilisation : dans certains cas, nous devrons peut-être effectuer certaines opérations avant la condition.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *