PHP'nin listenin javascript eşdeğeri ()

4 Cevap php

Gerçekten işlevi gibi.

$matches = array('12', 'watt');
list($value, $unit) = $matches;

Bunun bir JavaScript eşdeğeri var mı?

4 Cevap

Var, ama Javascript "yeni" sürümleri: Destructuring assignment - Javascript 1.7. Muhtemelen sadece Mozilla tabanlı tarayıcılarda desteklenir, ve belki Rhino oluyor.

var a = 1;  
var b = 3;  

[a, b] = [b, a];  

EDIT: (böylece ve Krom) V8 Javascript kütüphanesi bu destekliyorsa aslında bana sürpriz olmaz. Ama bunun üzerinde sayılmaz :)

Bu deneyin:

matches = ['12', 'watt'];
[value, unit] = matches; 

This is my solution for using List/Explode on Javascript. Fiddle Working Example

İlk uygulama:

var dateMonth = "04/15";
dateMonth.split("/").list("month","day", "year");
month == "04";
day == "15";
year == null;

Ayrıca, yeni oluşturulan değişkenler kapsam sağlar:

var scoped = (function()
{ 
    var dateMonth = "07/24/2013"; 
    dateMonth.split("/").list("month","day", "year", this);
    this.month == "07";
    this.day == "24";
    this.year == "2013";
})();

Bu, bir dizi prototip değiştirerek gerçekleştirildi.

Array.prototype.list = function()
{
    var 
        limit = this.length,
        orphans = arguments.length - limit,
        scope = orphans > 0  && typeof(arguments[arguments.length-1]) != "string" ? arguments[arguments.length-1] : window 
    ;

    while(limit--) scope[arguments[limit]] = this[limit];

    if(scope != window) orphans--;

    if(orphans > 0)
    {
        orphans += this.length;
        while(orphans-- > this.length) scope[arguments[orphans]] = null;  
    }  
}

CoffeeScript sözdizimi ile strüktür atama sunmaktadır:

[a, b] = someFunctionReturningAnArray()

Bu çok yeni bir JavaScript versiyonları sunulan özelliği hemen hemen aynıdır. Ancak, CoffeeScript hatta IE6 JavaScript motoru ile uyumludur derlenmiş JS üretir, ve uyumluluk önemlidir, bu nedenle iyi bir seçenektir.