本文共 3325 字,大约阅读时间需要 11 分钟。
在jslibs的项目wiki上看到这些技巧,都是一些在mozilla spidermonkey javascript上的高级戏法。在JScript上不能用的哈~。这里转过来,很多技巧挺有趣的。
原文引用在:
------------------------------------------
1. destructuring assignments
var { a : x } = { a : 7 }; Print ( x ); // prints: 7 [ y for ( y in [ 5 , 6 , 7 , 8 , 9 ] ) ] // is [0,1,2,3,4] [ y for each ( y in [ 5 , 6 , 7 , 8 , 9 ] ) ] // is [5,6,7,8,9] Because in for extracts index names, and for each extracts the values. 3. Advanced use of iterators Number . prototype . __iterator__ = function () { for ( let i = 0 ; i < this ; i ++ ) yield i ; }; for ( let i in 5 ) print ( i ); This make Number object to act as a generator. Note that braces { ... } and return are implicit LoadModule ( 'jsstd' ); function ThrowAnError () { ( function (){ throw new Error ( "Whoops!" ); })(); } try { ThrowAnError () } catch ( e ) { Print ( e . stack ); } Error ( "Whoops!" ) @ : 0 () @test . js : 7 ThrowAnError () @test . js : 5 @test . js : 14 6. Multiple-value returns function f () { return [ 1 , 2 ]; } var [ a , b ] = f (); Print ( a + ' ' + b ); // prints: 1 2 7. Operator [ ] and strings ( like charAt() ) var str = 'foobar' ; Print ( str [ 4 ] ); 8. indexOf() and lastIndexOf() Works on Array var obj = {}; var arr = [ 'foo' , 567 , obj , 12 . 34 ]; Print ( arr . indexOf ( obj ) ); // prints: 2 9. Using Array functions on a non-Array object var obj = {}; Array . push ( obj , 'foo' ); Array . push ( obj , 123 ); Array . push ( obj , 5 . 55 ); Print ( obj . toSource () ); // prints: ({0:"foo", length:3, 1:123, 2:5.55}) 10. Simulate threads using yield operator var scheduler = new function () { var _workers = []; this . Add = function ( worker ) { _workers . push ( new worker () ); } this . Run = function () { while ( _workers . length ) for each ( var worker in _workers ) try { worker . next (); } catch ( err if err instanceof StopIteration ) { _workers . splice ( _workers . indexOf ( worker ), 1 ); } } } function worker1 () { for ( var i = 0 ; i < 5 ; i ++ ) { Print ( 'worker1: ' + i , '/n' ); yield ; } } scheduler . Add ( worker1 ); function worker2 () { for ( var i = 0 ; i < 10 ; i ++ ) { Print ( 'worker2: ' + i , '/n' ); yield ; } } scheduler . Add ( worker2 ); scheduler . Run (); worker1 : 0 worker2 : 0 worker1 : 1 worker2 : 1 worker1 : 2 worker2 : 2 worker1 : 3 worker2 : 3 worker1 : 4 worker2 : 4 worker2 : 5 worker2 : 6 worker2 : 7 worker2 : 8 worker2 : 9 var a = 1 ; var b = 2 ; [ a , b ] = [ b , a ]; 12. Destructuring assignment with function arguments function foo ( [ a , b ] ) { Print ( a ); Print ( b ); } foo ( [ 12 , 34 ] ); 13. JavaScript scope and LET instruction var x = 5 ; var y = 0 ; let ( x = x + 10 , y = 12 ) { Print ( x + y ); } Print ( x + y ); for ( let i = 0 ; i < 10 ; i ++ ) { Print ( i + ' ' ); } Print ( i ); 0 1 2 3 4 5 6 7 8 9 test . js : 4 : ReferenceError : i is not defined for each ( var i in [ 3 , 23 , 4 ] ) Print ( i ) 转载地址:http://tlhbb.baihongyu.com/