//------------------------------------------------------------------------------------------------------- // 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)); })()