2016-04-08 19 views
2

JSCript yazıp WindowsScriptHost.However ile çalıştırın, Array.forEach() eksik gibi görünüyor. JScript/WindowsScriptHost Array.forEach() eksik mi?

['a', 'b'].forEach(function(e) { 
    WSH.Echo(e); 
}); 

"test.js (66, 2) Microsoft JScript çalışma zamanı hatası: Nesne bu özelliği veya yöntemi desteklemiyor" başarısız.

Bu doğru olamaz? Gerçekten Array.forEach() eksik mi? For döngüsü değişkenlerinden birini kullanmak zorunda mıyım?

cevap

2

JScript, JavaScript özellik seti as it existed in IE8'u kullanır. Windows 10'da bile, Windows Komut Dosyası Sistemi, JScript 5.7 ile sınırlıdır. Bu MSDN documentation açıklıyor: Eğer bu yöntemi çağırmak için izin hiçbir anahtarları var sonuçta demektir

Starting with JScript 5.8, by default, the JScript scripting engine supports the language feature set as it existed in version 5.7. This is to maintain compatibility with the earlier versions of the engine. To use the complete language feature set of version 5.8, the Windows Script interface host has to invoke IActiveScriptProperty::SetProperty .

... cscript.exe beri ve wscript.exe Microsoft Chakra motoru kilidini açmak için kendi komut ana yazmanızı öneriyor.

Yine de bir çözüm var. htmlfile COM nesnesini çağırabilir, IE9 (veya 10 veya 11 veya Kenar) uyumluluğuna zorlayabilir, ardından istediğiniz yöntemleri (Array.forEach(), JSON yöntemleri vb. Dahil) içe aktarabilirsiniz. İşte kısa bir örnek:

var htmlfile = WSH.CreateObject('htmlfile'); 
htmlfile.write('<meta http-equiv="x-ua-compatible" content="IE=9" />'); 

// And now you can use htmlfile.parentWindow to expose methods not 
// natively supported by JScript 5.7. 

Array.prototype.forEach = htmlfile.parentWindow.Array.prototype.forEach; 
Object.keys = htmlfile.parentWindow.Object.keys; 

htmlfile.close(); // no longer needed 

// test object 
var obj = { 
    "line1" : "The quick brown fox", 
    "line2" : "jumps over the lazy dog." 
} 

// test methods exposed from htmlfile 
Object.keys(obj).forEach(function(key) { 
    WSH.Echo(obj[key]); 
}); 

Çıktı:

The quick brown fox
jumps over the lazy dog.

birkaç diğer yöntemler demonstrated in this answer vardır - JSON.parse(), String.trim() ve Array.indexOf().