[技术讨论] 关于jscript.net

本帖最后由 jyswjjgdwtdtj 于 2024-8-26 15:23 编辑

jscript.net是c#,vb.net的同胞兄弟 然而c#没有历史包袱,如今愈发茁壮,vb.net尽管语法似乎不太适配如今的新东西,但依然有着大量的爱好者
jscript.net却被M$彻底遗弃,早早夭折,typescript这个同为js系的弟弟彻底为他添上坟头最后一捧土
说到底,jscript.net从未被当成一项正经的语言 它不支持直接使用win32api操作底层(哪怕对于这项语言的设计者来说在容易不过),甚至不像powershell可以简单的add-type加载c#Dll进assembly 它不支持泛型(哪怕它的标准es4中有)……
js.net的定位非M$声称的在asp.net里做vbs的后继者,因为他比起c#来说一无是处,而似乎更像powershell的脚本语言,然而js强调类型,函数,需要用编译器来”解释“,拔高了门槛。
如今js.net在2010年停止更新,在.net framework中保持静默发布
说来好笑 M$在es4(ie5时代,即jscript,vbs还可以在ie上运行的时候)上表示强烈反对,转头又做出了这么个缝合怪jscript.net——不完全支持es4,还夹带了些私货,把一门彻底的弱类型语言强行向CIL靠拢,实际上在一开始就给他判了死刑
注释的部分为es4支持但jscript.net不支持
  1. import System;
  2. import System.Windows.Forms;
  3. import System.Drawing;
  4. import System.Collections.Generic;
  5. import System.Collections;
  6. //import * from System;
  7. package Jscript_Net_Test{
  8.         class ES1ToES3{
  9.                 var a="Windows Script Host||IE-Jscript";
  10.                 function A(){
  11.                         var name="Jscript";
  12.                         var WshVersion=5.6;
  13.                         var IE=7;
  14.                         var __null__=null;
  15.                         var __undefined__=undefined;
  16.                         var string=new String('hello');
  17.                         WshVersion=parseFloat(WshVersion);
  18.                         IE=parseInt(IE);
  19.                         MessageBox.Show(('hello'===string).toString());
  20.                         MessageBox.Show(('hello'==string).toString());
  21.                         var obj={
  22.                                 array:[
  23.                                         "a",
  24.                                         1,
  25.                                         new Array(1),
  26.                                         new Function("return 1"),
  27.                                         Math.tan,
  28.                                         new Date(),
  29.                                         function(){
  30.                                                 return true;
  31.                                         }
  32.                                 ]
  33.                         };
  34.                         var ifunc=(function(){
  35.                                 var i=0
  36.                                 return function(){
  37.                                         return i++;
  38.                                 }
  39.                         }())
  40.                         with(Math){
  41.                                 var t=tan(1);
  42.                         }
  43.                 }
  44.         }
  45.         class JscripOnly{
  46.                 var enumobj=new Enumerator([]);
  47.         }
  48.         class ES4{
  49.                 const a="";
  50.                 internal const foo = 5;
  51.                 //const a=""" I'm "Jscript.Net" """;
  52.                 //var b:(Number,String);
  53.                 /*function LIKE(param1:like{x:int,y:int},param2:double):String{
  54.                         return "";
  55.                 }*/
  56.                 interface IMyInterface{
  57.                         function foo():double;
  58.                 }
  59.                 /*class Wrapper<T> {
  60.                         inner: T
  61.                 }*/
  62.                 //generic function addItem(x);
  63.                 function addItem(x: int) {
  64.                 }
  65.                 function addItem(x: Number) {
  66.                 }
  67.                 //const foo = <div class={a}>{"Hello" + a}</div>;
  68.                 public function b(){
  69.                 }
  70.                 private function c(){
  71.                 }
  72.         }
  73.         class Jscript_NetOnly{
  74.                 expando class MyExpandoClass {
  75.                &nb