| //------------------------------------------------------------------------------------------------------- | |
| // Copyright (C) Microsoft. All rights reserved. | |
| // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. | |
| //------------------------------------------------------------------------------------------------------- | |
| function write(v) { WScript.Echo(v + ""); } | |
| var r; | |
| // Delete locals | |
| (function Test1() { | |
| var p; | |
| var q = 10; | |
| write("p : " + p); | |
| r = delete p; | |
| write("delete p: " + r); | |
| write("p : " + p); | |
| write("q : " + q); | |
| r = delete q; | |
| write("delete q: " + r); | |
| write("q : " + q); | |
| }) (); | |
| test2_value = 10; | |
| // Delete globals | |
| (function Test2() { | |
| test2_local = 20; | |
| write("test2_value : " + test2_value); | |
| r = delete test2_value; | |
| write("delete test2_value: " + r); | |
| try { | |
| write("test2_value : " + test2_value); | |
| write("delete test2_value failed"); | |
| } catch (e) { | |
| write("delete test2_value passed"); | |
| } | |
| write("test2_local : " + test2_local); | |
| r = delete test2_local; | |
| write("delete test2_local: " + r); | |
| try { | |
| write("test2_local : " + test2_local); | |
| write("delete test2_local failed"); | |
| } catch (e) { | |
| write("delete test2_local passed"); | |
| } | |
| }) (); | |
| // Deleting parameters | |
| (function Test3(x,y,z) { | |
| write("Test3 x : " + x + " y: " + y + " z: " + z); | |
| r = delete x; | |
| write("delete x: " + r); | |
| r = delete y; | |
| write("delete x: " + r); | |
| r = delete z; | |
| write("delete x: " + r); | |
| write("Test3 x : " + x + " y: " + y + " z: " + z); | |
| })(10, "hello"); | |
| // Delete arguments[i] | |
| (function Test4(x,y,z) { | |
| write("Test4 x : " + x + " y: " + y + " z: " + z); | |
| write("Test4 arguments[0] : " + arguments[0] + " arguments[1]: " + arguments[1] + " arguments[2]: " + arguments[2]); | |
| r = delete arguments[0]; | |
| write("delete arguments[0]: " + r); | |
| r = delete arguments[2]; | |
| write("delete arguments[2]: " + r); | |
| write("Test4 x : " + x + " y: " + y + " z: " + z); | |
| write("Test4 arguments[0] : " + arguments[0] + " arguments[1]: " + arguments[1] + " arguments[2]: " + arguments[2]); | |
| }) (10, "hello"); | |
| // Delete nested function | |
| (function Test5() { | |
| function test5_func() { return 100;} | |
| r = delete test5_func; | |
| write("Test5: delete function " + r); | |
| write("test5_func() :" + test5_func()); | |
| }) (); | |
| // Delete this | |
| (function Test6() { | |
| try { | |
| r = delete this; | |
| } catch (e) { | |
| write("Exception delete this : " + e.message); | |
| } | |
| write("Test6: delete this: " + r); | |
| }) (); | |
| // Delete a global function | |
| function test7_value() {} | |
| (function Test7() { | |
| r = delete test7_value; | |
| write("Test7: delete test7_value: " + r); | |
| }) (); | |
| // Delete arguments | |
| (function Test8() { | |
| r = delete arguments; | |
| write("Test8: delete arguments: " + r); | |
| }) (); | |
| // Delete exception | |
| (function Test9() { | |
| try { | |
| throw 10; | |
| } catch(e) { | |
| r = delete e; | |
| } | |
| write("Test9: delete exception: " + r); | |
| })(); | |
| // Delete exception | |
| (function Test10() { | |
| try { | |
| throw new Error("some error"); | |
| } catch(e) { | |
| r = delete e; | |
| } | |
| write("Test10: delete exception: " + r); | |
| })(); | |
| // Delete variable declared using eval | |
| (function Test11(){ | |
| eval("var x = 10;"); | |
| r = delete x; | |
| write("Test11: delete x: " + r); | |
| }) (); | |
| // Delete variable declared using eval, in eval | |
| (function Test12(){ | |
| eval("var x = 10;"); | |
| r = eval("delete x"); | |
| write("Test12: delete x: " + r); | |
| }) (); | |
| // Delete variable in eval | |
| (function Test13(){ | |
| var x; | |
| r = eval("delete x;"); | |
| write("Test13: delete x: " + r); | |
| }) (); | |
| // Delete function in eval | |
| (function Test14(){ | |
| function f() { return 100;} | |
| r = eval("delete f;"); | |
| write("Test14: delete f: " + r); | |
| }) (); | |
| // Delete function in eval, declared in eval | |
| (function Test15(){ | |
| eval("function f() { return 100;}"); | |
| r = eval("delete f;"); | |
| write("Test15: delete f: " + r); | |
| }) (); | |
| // Delete function, declared in eval | |
| (function Test16(){ | |
| eval("function f() { return 100;}"); | |
| r = delete f; | |
| write("Test16: delete f: " + r); | |
| }) (); | |
| // Delete arguments in function declared and called in eval | |
| (function Test17(){ | |
| r = eval("function test17_value(){ return delete arguments; }; test17_value();"); | |
| write("Test17: delete test17_value: " + r); | |
| }) (); | |
| // With cases | |
| // Delete local variable, not in with | |
| (function Test18(){ | |
| var test18_value = 10; | |
| var o = {}; | |
| with(o){ | |
| r = delete test18_value; | |
| } | |
| write("Test18: delete test18_value: " + r); | |
| write("test18_value : " + test18_value); | |
| }) (); | |
| // Delete variable in with | |
| (function Test19(){ | |
| var test19_value = 10; | |
| var o = { test19_value : 20 }; | |
| with(o){ | |
| r = delete test19_value; | |
| } | |
| write("Test19: delete test19_value: " + r); | |
| write("test19_value : " + test19_value); | |
| write("o.test19_value : " + o.test19_value); | |
| }) (); | |
| // Delete local variable, not in with inside eval | |
| (function Test20(){ | |
| var test20_value = 10; | |
| var o = {}; | |
| with(o){ | |
| r = eval("delete test20_value"); | |
| } | |
| write("Test20: delete test20_value: " + r); | |
| write("test20_value : " + test20_value); | |
| }) (); | |
| // Delete variable in with, inside eval | |
| (function Test21(){ | |
| var test21_value = 10; | |
| var o = { test21_value : 20 }; | |
| with(o){ | |
| r = eval("delete test21_value"); | |
| } | |
| write("Test21: delete test21_value: " + r); | |
| write("test21_value : " + test21_value); | |
| write("o.test21_value : " + o.test21_value); | |
| }) (); | |
| // Delete variable in multi level with!!! | |
| (function Test22(){ | |
| var test22_value = 10; | |
| var o1 = { test22_value : 20 }; | |
| var o2 = { test22_value : 30 }; | |
| var o3 = { test22_value : 40 }; | |
| var o4 = { test22_value : 50 }; | |
| with(o1){ | |
| with(o2){ | |
| with(o3){ | |
| with(o4){ | |
| r = delete test22_value; | |
| } | |
| } | |
| } | |
| } | |
| write("Test22: delete test22_value: " + r); | |
| write("test22_value : " + test22_value); | |
| write("o1.test22_value : " + o1.test22_value); | |
| write("o2.test22_value : " + o2.test22_value); | |
| write("o3.test22_value : " + o3.test22_value); | |
| write("o4.test22_value : " + o4.test22_value); | |
| }) (); | |
| (function Test23(){ | |
| var test23_value = 10; | |
| var o1 = { test23_value : 20 }; | |
| var o2 = { test23_value : 30 }; | |
| var o3 = { test23_value : 40 }; | |
| var o4 = { test23_value : 50 }; | |
| with(o1){ | |
| with(o2){ | |
| with(o3){ | |
| with(o4){ | |
| r = eval("delete test23_value"); | |
| } | |
| } | |
| } | |
| } | |
| write("Test23: delete test23_value: " + r); | |
| write("test23_value : " + test23_value); | |
| write("o1.test23_value : " + o1.test23_value); | |
| write("o2.test23_value : " + o2.test23_value); | |
| write("o3.test23_value : " + o3.test23_value); | |
| write("o4.test23_value : " + o4.test23_value); | |
| }) (); | |
| var Test24_value = 1; | |
| (function Test24(){ | |
| var Test24_value = 10; | |
| var o = { Test24_value : 20 }; | |
| with(o){ | |
| r = delete Test24_value; | |
| } | |
| write("Test24: delete Test24_value: " + r); | |
| write("Test24_value : " + Test24_value); | |
| write("o.Test24_value : " + o.Test24_value); | |
| }) (); | |
| var Test25_value = 1; | |
| (function Test25(){ | |
| var o = { Test25_value : 20 }; | |
| with(o){ | |
| r = eval("delete Test25_value"); | |
| } | |
| write("Test25: delete Test25_value: " + r); | |
| write("Test25_value : " + Test25_value); | |
| write("o.Test25_value : " + o.Test25_value); | |
| }) (); | |
| var Test26_value = 1; | |
| (function Test26(){ | |
| var o = new Object(); | |
| with(o){ | |
| r = delete Test26_value; | |
| } | |
| write("Test26: delete Test26_value: " + r); | |
| write("Test26_value : " + Test26_value); | |
| write("o.Test26_value : " + o.Test26_value); | |
| }) (); | |
| var Test27_value = 1; | |
| (function Test27(){ | |
| var o = new Object(); | |
| with(o){ | |
| r = delete Test27_value; | |
| } | |
| write("Test27: delete Test27_value: " + r); | |
| write("Test27_value : " + Test27_value); | |
| write("o.Test27_value : " + o.Test27_value); | |
| }) (); | |
| // Function Declaration. And eval with same name | |
| function Func28() | |
| { | |
| write("Func28.1 :" + typeof(Func28)); | |
| eval("var Func28 = 1;"); | |
| write("Func28.2 :" + typeof(Func28)); | |
| r = delete Func28; | |
| write("Func28: delete Func28: " + r); | |
| write("Func28.3 :" + typeof(Func28)); | |
| eval("var Func28 = 1;"); | |
| write("Func28.4 :" + typeof(Func28)); | |
| eval("r = delete Func28;"); | |
| write("Func28: delete Func28: " + r); | |
| write("Func28.5 :" + typeof(Func28)); | |
| } | |
| Func28(); | |
| (function Expr29() | |
| { | |
| write("Expr29.1 :" + typeof(Expr29)); | |
| eval("var Expr29 = 1;"); | |
| write("Expr29.2 :" + typeof(Expr29)); | |
| r = delete Expr29; | |
| write("Expr29: delete Expr29: " + r); | |
| write("Expr29.3 :" + typeof(Expr29)); | |
| eval("var Expr29 = 1;"); | |
| write("Expr29.4 :" + typeof(Expr29)); | |
| eval("r = delete Expr29;"); | |
| write("Expr29: delete Expr29: " + r); | |
| write("Expr29.5 :" + typeof(Expr29)); | |
| })() | |
| function Func30() | |
| { | |
| write("Func30.1 :" + typeof(Func30)); | |
| eval("var Func30 = 1;"); | |
| eval('write("Func30.2 :" + typeof(Func30));'); | |
| eval('eval("var Func30 = {};");'); | |
| eval('write("Func30.3 :" + typeof(Func30));'); | |
| var str = '(function Func30_inner() {' + | |
| ' write("Func30.4 :" + typeof(Func30));' + | |
| ' r = delete Func30; ' + | |
| ' write("Func30: delete Func30: " + r);' + | |
| ' write("Func30.5 :" + typeof(Func30));' + | |
| ' r = delete Func30; ' + | |
| ' write("Func30: delete Func30: " + r);' + | |
| ' write("Func30.6 :" + typeof(Func30));' + | |
| '})();'; | |
| eval(str); | |
| write("Func30.7 :" + typeof(Func30)); | |
| } | |
| Func30(); | |
| (function Expr31() | |
| { | |
| write("Expr31.1 :" + typeof(Expr31)); | |
| eval("var Expr31 = 1;"); | |
| eval('write("Expr31.2 :" + typeof(Expr31));'); | |
| eval('eval("var Expr31 = {};");'); | |
| eval('write("Expr31.3 :" + typeof(Expr31));'); | |
| var str = '(function Expr31_inner() {' + | |
| ' write("Expr31.4 :" + typeof(Expr31));' + | |
| ' r = delete Expr31; ' + | |
| ' write("Expr31: delete Expr31: " + r);' + | |
| ' write("Expr31.5 :" + typeof(Expr31));' + | |
| ' r = delete Expr31; ' + | |
| ' write("Expr31: delete Expr31: " + r);' + | |
| ' write("Expr31.6 :" + typeof(Expr31));' + | |
| '})();'; | |
| eval(str); | |
| write("Expr31.7 :" + typeof(Expr31)); | |
| })() |